我觉得这应该很容易在网上找到,但我很难。
有谁知道 c# 的价值是Double.Epsilon
什么?我正在寻找确切的数值。
这是它的声明:
[__DynamicallyInvokable]
public const double Epsilon = 4.94065645841247E-324;
不,这肯定是不正确的。
第一: 的值Double.Epsilon
可以很容易地通过一个小程序或阅读文档找到:
4.94065645841247E-324
第二:不要将此值与Machine Epsilon混淆,后者通常用于两个双精度值之间的比较。有关“Machine Epsilon”的更多详细信息,请参阅此问题。
该常数的值为 4.94065645841247e-324。
这些答案都不是确切的数值。确切的值是 2 的幂,即 2^-1074,因为这就是 IEEE 浮点数在现代计算机中的实际存储方式。给出的所有其他答案都是十进制近似值。如果将该十进制近似值分配给 a double
,那么它将四舍五入为 2^-1074,因此在内部,寄存器或内存位置将接收真正的“Epsilon”值。因此,使用十进制常量将存储位置初始化为最小浮点值是可行的,但十进制常量仍然不是这个最小浮点值的实际值。
解释:用 IEEE 表示法写的最小正值是
0.000000000000000000000000000000000000000000000000000001B x 2^-1022。
(B代表二进制)
也就是将 1 移到二进制点右侧 52 位,然后再移 1022 位,总共 1074 位。前导符号位为零。符号位(1 位)加上系数(52 位)加上指数(11 位)给出 64 位的存储空间。
另请注意,这是一个“非规范化”浮点值,因为指数是 -1022。
请参阅https://en.wikipedia.org/wiki/IEEE_floating_point并搜索“1074”。
附言。我的计算器将 = 2^-1074 的值更精确地表示Double.Epsilon
为 4.9406564584124654417656879286822e-324。