代码之家  ›  专栏  ›  技术社区  ›  SharpShade

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

c#
  •  0
  • SharpShade  · 技术社区  · 7 年前

    我经常会遇到异常,因为用于计算颜色(字节)的因子(规范化值)为负或大于1。

    所以我修改了代码,基本上把min,max和value移动了 Math.Abs(min) 以确保我的价值观是积极的。消极的问题已经解决了,但我有时会得出这样的结论 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;
    ...
    }
    

    如何在不添加舍入或“边盒”的情况下修复此问题?我认为 Math.Abs() 与添加操作相结合,会导致值稍有偏差。。。但一定有办法解决的,对吧?

    0 回复  |  直到 7 年前