Есть ли эффективный способ (без преобразования float в строку), чтобы получить число цифр, число с плавающей запятой состоит (независимо от его длины и точности)?
На этом пути я могу реализовать довольно хорошую, переносимую, проблемную функцию для сравнения / кондиционирования, умножая поплавок на количество цифр, из которых он состоит.
В: Есть ли эффективный способ получить число цифр числа с плавающей запятой?
A: Я в этом сомневаюсь.
Каждое конечное число FP является точным , но, возможно, не точным значением, которое думает.
Из-за типичной реализации двоичного кода double
,
double x = 0.53
, x
значение: .5300000000000000266453525910037569701671600341796875
, 52 цифры.
double x = 0.1
, x
значение: .1000000000000000055511151231257827021181583404541015625
55 цифр.
Следующий ближайший double
к математическому 0.1
.09999999999999999167332731531132594682276248931884765625
с 56 цифрами.
DBL_MAX
: в десятичной DBL_MAX
, обычно около 300 цифр 17976931348623158...
заканчивается на 6728515625.
..
DBL_MIN
: обычно 0.000000(~300 zeros) 22250738585072014... (maybe about 700 more digits)
.
Сравнение чисел FP не должно определять количество дигита в его десятичном представлении. Чтобы сравнить номера FP, используйте обычные операторы отношений >, >=, ==
и т. Д.
Эти значения являются иллюстративными. YMMV.