![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| keisik |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 118 Регистрация: 25.3.2002 Репутация: нет Всего: нет |
Есть вот такая пргораммка, для разбиения суммы на составляющие:
Внимание, вопрос: Сумма 23.24 разбивается неправильно, ибо в момент, когда в Z остаётся 0,24 $, и пытаемся пооделить на 0.10 происходит следующее: v[i]=z/b1[i];//z=0.24, b1[i]=0.10,v[i] соответственно остаётся 2 t=v[i]*b1[i];//t=2*0.10 и равно 0.20 z=z-t;//а вот тут самое интересное, z=0.24-0.20 и равно не 0.04 как хотелось бы надеяться, а 0.039999998 или что-то в этом роде. Почему? При том что сумму 3.24 обрабатывает нормально. ЗЫ: Проверено и в VC и в Билдере, и там и там одинаково. --------------------
...None of that can stop us now,we will make it through somehow... |
|||
|
||||
| Fantasist |
|
|||
|
Лентяй ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1517 Регистрация: 24.3.2002 Репутация: 4 Всего: 41 |
А потому, что двоичное представление реальных чисел не всегда может отразить точно десятичное представление. То есть переменные типа double имеют ограниченную точность. Что бы понять почему так, тебе нужно прочитать где-нибудь о форме представления double в памяти.
-------------------- Волны гасят ветер... |
|||
|
||||
| neutrino |
|
|||
![]() Gothic soul ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3041 Регистрация: 25.3.2002 Где: Верхняя Галилея, Кармиэль Репутация: 1 Всего: 62 |
У чисел с одинарной точностью - 1 бит знак, 8 бит степень, 23 бит мантисса. Чтобы перевести в десятичное значение, надо отнять от степени 127, сдвинуть на получившееся число знаков запятую в мантиссе, перевести отдельно целую ио дробную часть, поставить знак.
У чисел с двойной точностью - 1 бит знак, 8 бит степень, 53 бит - мантисса. Алгоритм перевода такой же. -------------------- The truth comes from within ... Покойся с миром, Vit |
|||
|
||||
| keisik |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 118 Регистрация: 25.3.2002 Репутация: нет Всего: нет |
Спасибо, буду знать.
Весьма ненадёжные товарищи получается эти реальные числа... --------------------
...None of that can stop us now,we will make it through somehow... |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |