Блог им. sevkav60

Небольшое непонимание в языке 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

Кто может обьяснить в чем проблема и как решить данную проблему?
Данная публикация является личным мнением автора. Мнение владельца сайта может не совпадать с мнением автора.
  • Ключевые слова:
  • LUA
80 | ★3
11 комментариев
На первый взгляд проблема в типах данных
avatar
Потому что в переменной «а» лежит не то, что вы думаете. Скорее всего из-за её типа.
avatar
Попробуйте для переменной «a» явно указать дробную часть
a = -20.0+12.7;
avatar
sahar, о я делал, тотже результат.
avatar
Уж не QLua ли это. Не совсем корректно преобразуется тип (int) в (double). Действительно попробуйте написать -20.0 или (double)-20.
avatar
Karim, бесполезно.
avatar
tonumber(a)
avatar
«а» как объявлена? попробуйте объявить ее явно и приведите сразу к типу double.
double a;
avatar
Ivor, тут слабая типизация. Здесь не пишут тип рядом с переменой
avatar
Все правильно. Число b — ОЧЕНЬ маленькое, практически ноль.
Проблема у вас может возникнуть, только если вы начнете сравнивать b с нулем:
if(b == 0)… чего в программировании при использоваини вещественных чисел делать никогда не следует. Нужно писать, например
if abs(b) < 10e-8
avatar
Проблема в том, что многие вещественные числа (например, 0.1) невозможно представить в двоичном виде, в итоге компьютер оперирует приближённым значением.
Довольно странно, что Вы только сейчас узнали об этой проблеме: в школе/университете при написании циклов на Basic Вы были просто обязаны попасть на эту ошибку
avatar

Читайте на SMART-LAB:
Невостребованные дивиденды: как они возникают и куда уходят
Бывают случаи, когда компания объявляет дивиденды, но часть выплат до акционеров не доходит. Объясняем простыми словами, почему так может...
Фото
📢 29 июня состоится годовое Общее собрание акционеров ПАО «МГКЛ»
29 июня 2026 года пройдет годовое Общее собрание акционеров ПАО «МГКЛ», в рамках которого акционерам предстоит принять решения по ключевым...
Фото
МД Медикал - очередная сделка, теперь с плечом
МД Медикал объявила о приобретении Ильинской больницы.  Как изменится результат группы после сделки?
Фото
Список акций и цен, которые я считаю интересными в моменте
Обвал продолжается. Давайте посмотрим акции, которые могут быть интересны, если предположить, что конца света для российской экономики не...

теги блога Sev Kav

....все тэги



UPDONW
Новый дизайн