@LemanRass09

Что с точностью float?

Код:
float t = 3713.41f;
Debug.Log(t);
float r = t - 3600.0f;
Debug.Log(r);


Output:
3713.41
113.4099


Что не так с дробной частью?

---------------------------------------
Да, понятно, что с double все сработает. Но волнует другое.
Вот тут представлен наглядный пример когда логика кода верна,
но результат выполнения - не тот, который ожидался.
Выходит, что в любом более сложном коде, точно так же в результате
какой-то арифметической операции может получиться неверный результат.
Получается float не надёжен? В таком случае почему бы его не закинуть в
unsafe блок? (утрирую).
  • Вопрос задан
  • 134 просмотра
Решения вопроса 1
@Free_ze
Пишу комментарии в комментарии, а не в ответы
Получается float не надёжен?

Смотря кому, когда и как. Всё зависит от того, какая точность важна в конкретной задаче. Деньги на нем не считают, но для большого круга задач этой точности вполне хватает, а эффективность кода с double гораздо выше, чем decimal.

float нужен лишь затем, что этот тип занимает вдвое меньше памяти, чем double. Где-то это может сыграть решающую роль.

ЗЫ В конкретной ситуации вас спасёт Math.Round
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Griboks
@Griboks Куратор тега C#
1. Исходные данные вы вводили с точностью до сотых. Ответ получили верный с точностью до сотых. Никаких проблем нет. Пример некорректен.
2. Точность (количество знаков) фиксирована. Проблема, как вам уже написали, в системе счисления. Если вам надо считать в десятичной системе, используйте специализированные для этого типы. Компьютер вычисляет float без ошибок. Ошибки возникают при кодировании результата в "читаемый" вид и наоборот.
Ответ написан
Комментировать
dabrahabra
@dabrahabra
.NET Developer
double тоже работает не так как вы ожидаете - а вся проблема в том, что вы не ознакомились с спецификацией языка, типов данных, как они хранятся в памяти. Иммено с этого нужно начать.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы