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 |
|