2015-07-29 8 views
-1

Есть ли эффективный способ (без преобразования поплавка в строку), чтобы получить число цифр, число с плавающей запятой состоит (независимо от его длины и точности)?Подсчитайте количество цифр числа с плавающей запятой


На этом пути я могу реализовать довольно хорошую, портативную, проблемную менее функцию для сравнения/кондиционирования путем умножения с плавающей точки по количеству цифр она состоит.

+0

Вы имеете в виду, что у 1.2 есть 2, а у 1.21 есть 3? Где в основном цифры заканчиваются, где начинается 0 или когда точность ударяется? – ydobonebi

+3

Какова длина PI? –

+1

Поскольку '0,1' в коде не является точным математическим числом' 0,1', каково ваше ожидаемое количество цифр? Ваша мысль * * проблематична, что делает вопрос непонятным. –

ответ

3

Вопрос: Есть ли эффективный способ получить число цифр с плавающей запятой?
A: Я сомневаюсь.

Каждый конечный номер FP - точный, но, возможно, это не точная величина, которую вы считаете.

В связи с типичной binary64 реализации double,
double x = 0.53, x значение: .5300000000000000266453525910037569701671600341796875, 52 цифр.
double x = 0.1, x значение: .1000000000000000055511151231257827021181583404541015625 55 цифр.
Следующий ближайший double к математическому 0.1 is .09999999999999999167332731531132594682276248931884765625 с 56 цифрами.

DBL_MAX: в десятичной форме, обычно около 300 цифр 17976931348623158... заканчивается на 6728515625..

DBL_MIN: обычно 0.000000(~300 zeros) 22250738585072014... (maybe about 700 more digits).

Сравнение номеров FP не обязательно определяет количество цифр в десятичном представлении. Чтобы сравнить номера FP, используйте обычные операторы связи >, >=, == и т. Д.

Эти значения являются иллюстративными. YMMV.

+0

Проблема с моей идеей заключается в том, что '12,5 * 100 = 1250', что также было бы результатом' 0,125 * 1000 = 1250' – Malina

+2

Malina Конечно, вы можете найти _select_ числа, которые имеют простое _exact_ десятичное представление, такое как 12,5, но не 0,53 или 0,1. У вас быстро возникнут проблемы с номерами FP в целом. Как прокомментировал @ydobonebi, большинство номеров FP имеют много десятичных цифр при печати точно. Конечно, код может округлять до 5 или 6 цифр, но тогда код начинает иметь приблизительные ответы. Вопрос сводится к тому, насколько вы можете терпеть неточность и какова реальная проблема, которую вы пытаетесь решить. – chux

+0

преобразование числа с плавающей запятой в соответствующее целое число. – Malina

 Смежные вопросы

  • Нет связанных вопросов^_^