提问人:Jeppe Stig Nielsen 提问时间:10/3/2023 更新时间:10/3/2023 访问量:81
为什么 .NET 说次正态数从来都不是 2 的幂?
Why does .NET say that subnormal numbers are never powers of 2?
问:
自 .NET 7(从 2022 年开始)以来,一直存在静态方法双倍。IsPow2
中。
谁决定永远不要将次正常数视为 2 的幂?例如,如果我尝试以下代码:
double exp = -1000.0;
while (true)
{
double pow2 = double.Exp2(exp);
if (pow2 == 0.0)
{
break;
}
bool isOk = double.IsPow2(pow2);
Console.WriteLine($"{exp} {isOk}");
--exp;
}
它产生如下输出:
... -1020 True -1021 True -1022 True -1023 False -1024 False -1025 False ...
所以像这样的数字(又名 或 ) 不允许作为 2 的幂。但它似乎可能有用;例如,十一个数字:Exp2(-1024.0)
Pow(2.0, -1024.0)
5.562684646268003E-309
Exp2(-1024.0)
, , , , ...,Exp2(-1024.1)
Exp2(-1024.2)
Exp2(-1024.3)
Exp2(-1025.0)
都不同,但第一个和最后一个是 2 的“更多”次方,而不是其他九个?
上一个:Python 中的to_numeric是四舍五入的小数点
下一个:浮点数学坏了吗?
评论
IsPow2
IsPow2
Exp2
if (pow2 == 0.0)
IsPow2
IsPow2()