Форум программистов, компьютерный форум CyberForum.ru

Как посчитать значение при потери точности? - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.92
Runa
 Аватар для Runa
130 / 82 / 3
Регистрация: 28.08.2009
Сообщений: 363
31.01.2011, 06:01     Как посчитать значение при потери точности? #1
Преобразования плавающих типов. Величины типа float преобразуются к типу double без изменения значения. Величины double и long double преобразуются к float c некоторой потерей точности. Если значение слишком велико для float, то происходит потеря значимости, о чем сообщается во время выполнения.
Собственно никак не получается понять как предсказать потерю точности. Какие биты отбрасываются? то ли смещение с мантиссой, то ли вообще просто старшие биты..
Если кто знает, расскажите пожалуйста
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.01.2011, 06:01     Как посчитать значение при потери точности?
Посмотрите здесь:

C++ Возможное округление при нахождении 2-й производной. При повышении точности программа начинает возвращать 0.
Написать программу, демонстрирующую потери точности при арифметических операциях C++
потеря точности при масштабировании C++
C++ WinAPI Как посчитать значение по формуле
Дана строка вида а1-а2+а3-а4+а5...Посчитать значение при обработке данной строки C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
31.01.2011, 06:09     Как посчитать значение при потери точности? #2
у них одинаковое число бит на порядок, но у float мантисса короче
грубо говоря, то что у double 0.323424234234324242*10^3 у float будет 0.32342423423*10^3
грубо, потому что мантисса в двоичном виде хранится, и обрезаются биты соответственно
Runa
 Аватар для Runa
130 / 82 / 3
Регистрация: 28.08.2009
Сообщений: 363
31.01.2011, 06:37  [ТС]     Как посчитать значение при потери точности? #3
на сколько я знаю у float на смещение отводится 8бит, а у double 11. В связи с этим никакие фокусы не вылезают?
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
31.01.2011, 06:39     Как посчитать значение при потери точности? #4
Maruna, смещение - порядок всмысле? ну если так, то double естественно больший диапазон чисел может представить
Runa
 Аватар для Runa
130 / 82 / 3
Регистрация: 28.08.2009
Сообщений: 363
31.01.2011, 06:54  [ТС]     Как посчитать значение при потери точности? #5
что больший это понятно, мне интересно как он преобразуется.
Вот например 100 0110 0011 это порядок для double (1023+100), как он будет выглядеть после преобразования во float? Просто пересчитается исходя из нового значения или отбросятся лишние биты?
Patch
2276 / 491 / 11
Регистрация: 01.04.2009
Сообщений: 2,178
31.01.2011, 08:24     Как посчитать значение при потери точности? #6
Цитата Сообщение от Maruna Посмотреть сообщение
Просто пересчитается исходя из нового значения или отбросятся лишние биты?
а что там пересчитывать?
просто отбросит лишние биты.
а при фиксированной длине порядка - так и вообще преобразование невозможно, если число больше, чем влазит в новую длину.
у вас есть лучший алгоритм преобразования двоичных чисел?
Runa
 Аватар для Runa
130 / 82 / 3
Регистрация: 28.08.2009
Сообщений: 363
31.01.2011, 08:49  [ТС]     Как посчитать значение при потери точности? #7
Patch, то есть, если разрядность 100 0110 0011 то после преобразования останется 0110 0011
а порядок вычисляется исходя из 127, а не из 1023, как было в double

у вас есть лучший алгоритм преобразования двоичных чисел?
просто хочу досконально разобраться
Patch
2276 / 491 / 11
Регистрация: 01.04.2009
Сообщений: 2,178
31.01.2011, 09:11     Как посчитать значение при потери точности? #8
Цитата Сообщение от Maruna Посмотреть сообщение
Patch, то есть, если разрядность 100 0110 0011 то после преобразования останется 0110 0011
нет, не так.
в числе с плавающей запятой есть мантисса и порядок.
порядок сократить нельзя в принципе - это же число знаков после запятой(или до).
если в получаемом формате длина порядка меньше, чем в исходном, то преобразование НЕВОЗМОЖНО.
а мантиссу сократить можно.
там младшие биты просто отбрасываются.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.01.2011, 09:24     Как посчитать значение при потери точности?
Еще ссылки по теме:

C++ Вычислить корень из числа типа long без потери точности
Посчитать ln(x) как бесконечную сумму до некоторой точности C++
Что такое ошибки «потери точности»? C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Runa
 Аватар для Runa
130 / 82 / 3
Регистрация: 28.08.2009
Сообщений: 363
31.01.2011, 09:24  [ТС]     Как посчитать значение при потери точности? #9
огромное спасибо, именно это и хотелось узнать
Yandex
Объявления
31.01.2011, 09:24     Как посчитать значение при потери точности?
Ответ Создать тему
Опции темы

Текущее время: 20:23. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru