C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
трабл с float, точность 10^-38
klen
Отправлено: 25.02.2005, 19:08


Машинист паровоза

Группа: Участник
Сообщений: 239



вобщем имею такой эффект:

CODE


float a  = 0.00089;
       a -= 0.00089;


В результате значение а равно 2.481043E-11
Это нормально? Я то считал что точность 32 битового float чтото возле floata 1*10^-38.

При сохранении плавающего числа в сторковый потом в плавающий , после некоторого числа преобразований у меня алгоритм начинает тупить — ошибки накапливаются.

С double таких проблем нет.

Кстате, скажите пожалуйста операции на чем быстрее — на float или double? Если одинаково то float ваще пользовать не буду.
Vasily
Отправлено: 26.02.2005, 11:46


Дежурный стрелочник

Группа: Участник
Сообщений: 31



На сколько я знаю, скорость не изменяется от использования дабла или лонга. Лично я всегда пользуюсь даблом.
klen
Отправлено: 27.02.2005, 11:23


Машинист паровоза

Группа: Участник
Сообщений: 239



Так и сделал. Взял Replace и во всех 80000 строка кода изменил float на double. Пропало много мелких странностей в работе программы на которые я уже забил.
Gedeon
Отправлено: 28.02.2005, 12:33


Ветеран

Группа: Модератор
Сообщений: 1742



Кстати тоже всегда беру дабл, причем именно из-за когда-то возникшей проблемы с флоат, даже и не помню уже, но вот все же хотелось бы разобраться, чуть больше времени появится, потыкаюсь, давайте думать, господа.
Konstantine
Отправлено: 28.02.2005, 13:23


Мастер участка

Группа: Модератор
Сообщений: 545



float — это рудимент от 16-ти разрядных процов... щас все процы 32-разрядные (уже и 64-рки пошли), посему у них операции с 32-разрядными числами выполняются за 1 такт... а быстрее — уже некуда
xim
Отправлено: 28.02.2005, 18:53


Станционный диспетчер

Группа: Участник
Сообщений: 143



А так?
CODE

float a  = 0.00089f;
       a -= 0.00089f;


И везде в константах для float постфикс должен быть аналогичным
xim
Отправлено: 28.02.2005, 19:45


Станционный диспетчер

Группа: Участник
Сообщений: 143



Да, забыл пояснить: 2.481043E-11 — разница в точности мантисс double(64bit) и float(32bit). По умолчанию константа с плавающей точкой (без указанного постфикса) — double

Вернуться в Вопросы программирования в C++Builder