Sev Kav
Sev Kav личный блог
07 июля 2015, 15:44

Небольшое непонимание в языке Lua.

У меня возникла проблема в понимание результата даного кода:

a =   -20+12.7;               //  здесь в переменную а записывается  -7,3
b =  a + 7.3;                   // здесь должен получится 0 ( но ноль не получается)   
c = -7.3 +7.3;                // и здесь должен быть 0
print(b);
print©;

Но вот результат вывода:

-8.8817841970013e-16
0

Кто может обьяснить в чем проблема и как решить данную проблему?
11 Комментариев
  • caxap
    07 июля 2015, 16:00
    На первый взгляд проблема в типах данных
  • els
    07 июля 2015, 16:03
    Потому что в переменной «а» лежит не то, что вы думаете. Скорее всего из-за её типа.
  • caxap
    07 июля 2015, 16:05
    Попробуйте для переменной «a» явно указать дробную часть
    a = -20.0+12.7;
  • Karim
    07 июля 2015, 16:25
    Уж не QLua ли это. Не совсем корректно преобразуется тип (int) в (double). Действительно попробуйте написать -20.0 или (double)-20.
  • Egorax
    07 июля 2015, 16:27
    tonumber(a)
  • Ivor
    07 июля 2015, 16:29
    «а» как объявлена? попробуйте объявить ее явно и приведите сразу к типу double.
    double a;
  • Hedgehog
    07 июля 2015, 18:37
    Все правильно. Число b — ОЧЕНЬ маленькое, практически ноль.
    Проблема у вас может возникнуть, только если вы начнете сравнивать b с нулем:
    if(b == 0)… чего в программировании при использоваини вещественных чисел делать никогда не следует. Нужно писать, например
    if abs(b) < 10e-8
  • Том Сойер
    05 августа 2015, 23:18
    Проблема в том, что многие вещественные числа (например, 0.1) невозможно представить в двоичном виде, в итоге компьютер оперирует приближённым значением.
    Довольно странно, что Вы только сейчас узнали об этой проблеме: в школе/университете при написании циклов на Basic Вы были просто обязаны попасть на эту ошибку

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн