Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 规范化有符号值会导致值超出0和1_C# - Fatal编程技术网

C# 规范化有符号值会导致值超出0和1

C# 规范化有符号值会导致值超出0和1,c#,C#,我正在尝试创建某种热图来可视化我从传感器获得的数据。到目前为止,这是可行的,但看起来很奇怪。所以我发现我规范化值(至少从-100到100)的代码一定是无效的 我经常遇到异常,因为我用来计算颜色(字节)的因子(标准化值)为负或大于1 所以我修改了我的代码,基本上通过Math.Abs(min)移动了min、max和值,以确保我的值为正值。负面问题已经解决,但我有时会得到像1.02xxxx这样的值,这是绝对不会发生的编辑:在某些情况下仍然会得到负值 这是我目前的代码: double min = dat

我正在尝试创建某种热图来可视化我从传感器获得的数据。到目前为止,这是可行的,但看起来很奇怪。所以我发现我规范化值(至少从-100到100)的代码一定是无效的

我经常遇到异常,因为我用来计算颜色(字节)的因子(标准化值)为负或大于1

所以我修改了我的代码,基本上通过
Math.Abs(min)
移动了min、max和值,以确保我的值为正值。负面问题已经解决,但我有时会得到像1.02xxxx这样的值,这是绝对不会发生的编辑:在某些情况下仍然会得到负值

这是我目前的代码:

double min = data.Min();
double max = data.Max();
double avg = data.Average();
double v = max - min;

byte a, b, g, r;

// Set minimum and maximum
Dispatcher.InvokeAsync(() =>
{
    Minimum = min;
    Maximum = max;
    Average = avg;
});

double shift = 0;
if (min < 0) // If minimum is negative, shift it to 0 and everything else positively by Abs(min)
{
    max += shift = Math.Abs(min);
    min += shift;
}

int skipFactor = (int)(1 / _pointResolution);
for (int i = 0; i < data.Length; i += skipFactor)
{
    // If min == 0 then shift data
    double value = Math.Abs(min) < 0.0001d ? (data[i] + shift) / max : (data[i] - min) / v;
...
}
double min=data.min();
double max=data.max();
double avg=data.Average();
双v=最大-最小值;
字节a、b、g、r;
//设置最小值和最大值
Dispatcher.InvokeAsync(()=>
{
最小值=最小值;
最大值=最大值;
平均值=平均值;
});
双移位=0;
if(min<0)//如果最小值为负数,则将其移到0,并通过Abs(min)将其他值移到正数
{
最大+=位移=数学绝对值(最小值);
最小+=移位;
}
int skipFactor=(int)(1/_点分辨率);
for(int i=0;i

如何在不添加舍入或“边缘情况”的情况下修复此问题?我假设
Math.Abs()
与添加操作相结合会导致稍微偏离值。。。但必须有一个解决方案,对吗?

为什么不使用舍入?因为我正在研究光学测量值的表示。四舍五入会有点破坏这个想法。我想我已经找到了原因。还不能完全确认,但我猜这是因为我还没有克隆我规范化的数组,而另一个线程正在对它们进行写入。数值在计算过程中发生了明显变化,因此边界不再正确。