应该返回0的公式返回一个负数

时间:2014-01-21 00:14:35

标签: c# formula rgb hue

hue = (int)Math.Round(60 * ((double)(r - g) / sat + 4));

这是将色调设置为-2147483288,此时r,g和sat的值均为零。任何帮助赞赏!编辑:这是C#

2 个答案:

答案 0 :(得分:4)

你除以0.即sat为0.绝对不推荐任何编程语言。当sat = 0时,你会想要一个特例:

if(sat==0)
    hue = 0;
else
    hue = (int)Math.Round(60 * ((double)(r - g) / sat + 4));

答案 1 :(得分:2)

在右侧发生的是你正在执行零除以。这不会被报告为例外,因为您正在使用双打,并且允许这些零分割,但不会产生“好”和“有意义”的结果。特别是如果您进一步执行计算并将结果转换为int。

这对双打示例有何用处:

  • 1.0除以0.0 - > Double.PositiveInfinity
  • 0.0除以0.0 - > Double.NaN(非数字)
  • -1.0除以0.0 - > Double.NegativeInfinity

这是IEEE-754中定义的标准行为,大多数编程语言应该采用这种方式。