#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: Почитайте, к примеру, хотя бы это: «Что нужно знать про арифметику с плавающей запятой» и запомните как прописную истину. И больше не используйте вещественные числа для точных расчетов.
Комментариев нет:
Отправить комментарий