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

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

4

2 回答 2

4

您除以 0。即 sat 为 0。绝对不建议在任何编程语言中使用。当 sat = 0 时,你会想要一个特殊情况:

if(sat==0)
    hue = 0;
else
    hue = (int)Math.Round(60 * ((double)(r - g) / sat + 4));
于 2014-01-21T00:15:51.407 回答
2

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

这如何适用于双打示例:

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

这是 IEEE-754 中定义的标准行为,大多数编程语言都应该这样做。

于 2014-01-21T00:18:17.390 回答