从 .NET 7(从 2022 年起)开始,出现了静态方法double.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;
}
Run Code Online (Sandbox Code Playgroud)
它产生如下输出:
... -1020 正确 -1021 正确 -1022 正确 -1023 错误 -1024 错误 -1025 错误 ...
Exp2(-1024.0)因此,像(又名Pow(2.0, -1024.0)或)这样的数字5.562684646268003E-309不允许作为 2 的幂。但看起来它可能很有用;例如,十一个数字:
Exp2(-1024.0),Exp2(-1024.1),Exp2(-1024.2),Exp2(-1024.3), ...,Exp2(-1025.0)
都是不同的,但是第一个和最后一个比其他九个“更多”2的幂?