Это постоянное время, но это не самое быстрое решение с постоянным временем. Если мы довольны неправильными ответами на действительно малых double
с (то есть субнормальных)
long bits = BitConverter.DoubleToInt64Bits(number);
return (bits & 0xfffffffffffffL == 0L) && number != 0.0;
Мы просто вытаскиваем мантиссу и проверяем, что она равна нулю (ну, на самом деле, 1, потому что есть неявная 1 на всех обычных двойных числах). Если это правда, число должно быть степенью двойки или 0. Если вы хотите, чтобы это работало для ненормальных чисел, это немного больше работы.