Почему .NET говорит, что субнормальные числа никогда не являются степенями 2?

Начиная с .NET 7 (с 2022 года) существует статический метод .double.IsPow2.

Кто решил, что никогда не следует рассматривать сверхнормальные числа как степени двойки? Например, если я попробую этот код:

      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 Правда
-1021 Правда
-1022 Правда
-1023 Ложь
-1024 Ложь
-1025 Ложь
...

Итак, число типа (он жеPow(2.0, -1024.0)или5.562684646268003E-309) не допускается как степень двойки. Но, похоже, это может быть полезно; например, одиннадцать чисел:

Exp2(-1024.0),Exp2(-1024.1),Exp2(-1024.2),Exp2(-1024.3), ...,Exp2(-1025.0)

все разные, но первая и последняя имеют «больше» степеней 2, чем остальные девять?

0 ответов

Другие вопросы по тегам