Я хотел бы проверить, можно ли безопасно преобразовать длинную переменную в двойную. DBL_MAX
не помогает, потому что есть целые числа меньшие, чем то, которые не могут быть представлены двойным числом, в то время как некоторые из целых чисел, превышающих 2^53
, все еще могут уместиться.
Есть ли надежный способ сделать это? Может ли компилятор оптимизировать оператор, подобный приведенному ниже?
(long long)((double)a) == a
(где a
- это long long
)
Это не требует наибольшего целого числа, которое может быть представлено как двойное, я прошу общую функцию, которая может проверить, могу ли я точно преобразовать любое long long
значение в удвоение без ошибок .
a
нулю, еслиa
больше, чем pow (2, 53)?clz(abs(a)) + ctz(abs(a)) > 64 - 53
? - person EOF   schedule 18.04.2016long long
вdouble
, учитывая, что есть целые значения, которые двойное число не может сохранить? - person TezlaCoil   schedule 18.04.2016(long long) (3.12) == 3
следует рассматривать как истину. - person jdarthenay   schedule 18.04.2016long long
- person wesolyromek   schedule 18.04.2016(double) 3
3.12
, ваш последний тест сказал бы, что3.12
является безопасным приведением для3
как двойного ... - person jdarthenay   schedule 18.04.2016long long
, иdouble
задаются принципиально разные вопросы. - person chux - Reinstate Monica   schedule 19.04.2016