在Double.PositiveInfinity文档中写道:
当操作结果大于MaxValue时,返回此常量。
但是,当我尝试将某个数字添加到double
的最大值时,它不会返回infinity
。我试过这个:
double maxVal = Double.MaxValue;
maxVal = maxVal + 10000000000000000000;
Console.WriteLine(maxVal + " " + Double.IsInfinity(maxVal)); //prints 1.79769313486232E+308 False
为什么会这样?为什么不将maxVal
显示为infinity
?
答案 0 :(得分:8)
这是因为您添加的数字方式太小而无法对Double.MaxValue
值产生影响。
double
的精确度约为15位数,因此您需要一个至少为1e292
的数字才能使其大到足以产生差异。
那将是10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
写出来的。
答案 1 :(得分:0)
(*(long*)(&d) & 0x7FFFFFFFFFFFFFFF) == 0x7FF0000000000000;
当您在示例中替换它时,您会看到double.MaxValue
哪个值1.7976931348623157E+308
+ 10000000000000000000
仍然小于转化后的0x7FF0000000000000
。
double.MaxValue
,因为根据数学定义,X+z=X
表示X值更大,z更小。