0 / 0 / 0
Регистрация: 30.10.2014
Сообщений: 2
|
|
1 | |
При выводе числа с плавающей запятой теряются последние цифры30.10.2014, 05:21. Показов 4879. Ответов 3
Метки нет (Все метки)
Доброго времени суток! Мне дано число 0,1025390625. double отрезает конец и выводит 0.102539. Как мне сохранить это число целиком и оперировать с ним? Заранее спасибо.
0
|
30.10.2014, 05:21 | |
Ответы с готовыми решениями:
3
При вводе в textbox числа с плавающей запятой выбивает ошибку Как поменять разделитель при выводе вещественного числа в TextBox с запятой на точку? Как убрать последние две цифры после запятой? Числа с плавающей запятой |
Вездепух
11695 / 6374 / 1724
Регистрация: 18.10.2014
Сообщений: 16,068
|
|
30.10.2014, 05:48 | 2 |
Во-первых, double так резко не отрезает. Скорее всего вы просто используете недостаточную точность при выводе числа на печать. Запросите повыше точность при выводе.
Во-вторых, представить ваше число точно все равно не выйдет. В общем случае конечные десятичные дроби переводятся в бесконечные двоичные дроби. Поэтому при использовании двоичных плавающих форматов с этим придётся мириться. Если точность double (или long double) окажется для вас недостаточной, то придётся изобретать что-то принципиально иное.
0
|
0 / 0 / 0
Регистрация: 30.10.2014
Сообщений: 2
|
|
30.10.2014, 05:58 [ТС] | 3 |
1.cout << chislo << std::numeric_limits<double>::digits10; //или cout << chislo << std::numeric_limits<double>::max();
Таким образом? 2.long double у меня то же самое, что и double. Да, мне точности недостаточно. Кроме иного ничего доступного нет?
0
|
Вездепух
11695 / 6374 / 1724
Регистрация: 18.10.2014
Сообщений: 16,068
|
||||||
30.10.2014, 06:22 | 4 | |||||
Сообщение было отмечено akelling как решение
Решение
Нет, вот таким
0.102539 0.1025390625 Еще раз: отрезание выполняет не double или long double, а именно функция вывода текста на печать. Внутренне в double и long double хранится существенно более высокая точность. Вам надо лишь попросить функцию вывода не "глушить" эту точность. Я беру свои слова обратно. Число 0.1025390625 представимо точно в виде суммы степеней двойки. 0.102539062510 = 0.00011010012. Это значит, что это одно из тех "редких" чисел, которые представимы абсолютно точно в двоичном плавающем формате. Причем даже float достаточно, чтобы представить его точно.
1
|
30.10.2014, 06:22 | |
30.10.2014, 06:22 | |
Помогаю со студенческими работами здесь
4
Числа с плавающей запятой Числа с плавающей запятой Числа с плавающей запятой При переводе из double в string теряются знаки после запятой Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |