Страницы

Поиск по вопросам

вторник, 17 марта 2020 г.

Малая точность формата float

#float #cpp


Имеется следующий код:

namespace type{
    float a0 = 0.0f;
    float a1 = 0.1f;

    // ...

    float a7 = 0.7f;

    //...
};


В дальнейшем я использую ai для извлечения их дробной части и использую эту часть
как индекс элемента массива.

Но вот возникла такая штука: a7 оказалось равным 0.699999 после такой операции a7
= 0.7;. Почему? Почему так не точно? Я попробовал вывести значение на экран: оно равно
0.7.  В режиме отладки выяснил, что там все же не 0.7, а 0.69999. Значения переменных
аi должны быть float, так как они фигурирует в коде именно в таком виде.

Как быть? 
    


Ответы

Ответ 1



Я бы предложил написать клас, в котором будет отдельно содержатся целая часть и дробная: число a.bc представить в класе тремя переменными int a, b, c; и реальзовать все необходимые операции. Таким образом можно получить необходимую точность.

Ответ 2



Из комментария пользователя @KoVadim: Почитайте, к примеру, хотя бы это: «Что нужно знать про арифметику с плавающей запятой» и запомните как прописную истину. И больше не используйте вещественные числа для точных расчетов.

Комментариев нет:

Отправить комментарий