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