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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.92
Runa
132 / 84 / 3
Регистрация: 28.08.2009
Сообщений: 363
#1

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

31.01.2011, 06:01. Просмотров 1670. Ответов 8
Метки нет (Все метки)

Преобразования плавающих типов. Величины типа float преобразуются к типу double без изменения значения. Величины double и long double преобразуются к float c некоторой потерей точности. Если значение слишком велико для float, то происходит потеря значимости, о чем сообщается во время выполнения.
Собственно никак не получается понять как предсказать потерю точности. Какие биты отбрасываются? то ли смещение с мантиссой, то ли вообще просто старшие биты..
Если кто знает, расскажите пожалуйста
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.01.2011, 06:01
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как посчитать значение при потери точности? (C++):

Написать программу, демонстрирующую потери точности при арифметических операциях - C++
Можете рассписать по пунктам, что делать? Суть задания я уловила, а как реализовать - без единого понятия! Потеря точности при сложении:...

Что такое ошибки «потери точности»? - C++
Что такое ошибки «потери точности»? Приведите примеры.

Посчитать ln(x) как бесконечную сумму до некоторой точности - C++
Ничего в голову не лезет, нужно это сделать через функцию y=ln\, x=2\sum_{n=0}^{\infty}\frac{(x-1)^{2n+1}}{(2n+1)(x+1)^{2n+1}}\; , \;...

Вычислить корень из числа типа long без потери точности - C++
Собственно, задание такое: Нужно вычислить из очень большого числа типа long квадратный корень, не переводя его в double и без потери...

Дана строка вида а1-а2+а3-а4+а5...Посчитать значение при обработке данной строки - C++
Задача : дана строка вида а1-а2+а3-а4+а5 ..... Посчитать чему = значение при обработке данной строки. ______________________ Например...

Возможное округление при нахождении 2-й производной. При повышении точности программа начинает возвращать 0. - C++
Итак, здравствуйте. Такая проблема. Существует формула для нахождения 2-й производной функции: f''(x) = (f(x + h) - 2f(x) + f(x - h))...

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

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

Как посчитать среднее значение и количество одинаковых данных в Multimap? - C++
Вопрос в следующем. Как расчитать среднее значение цифр в multimap и общее количество одинаковых данных в нем? Добавлено через 37...

Увеличение точности при подсчетах - C++
Есть полностью рабочая программа, она находит корень К из числа Х с точностью prec. Работает все хорошо, но при подсчетах с дробовыми...

Потеря точности при масштабировании - C++
Доброго времени суток может кто-то подскажет алгоритм масштабирования без потери точности,пока я для этого пользуюсь типом double и...

Потеря точности при использовании static_cast - C++
По условию задачи нужно было явное приведение к типу. float n=45.5; int temp=static_cast<int>(n); ...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru