Блог им. 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
88 | ★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:
Материалы с вебинара по результатам III квартала
Друзья, рады поделиться с вами записью сегодняшнего вебинара, а также презентацией по итогам III квартала: 🔗 VK Video 🔗 YouTube 🔗 Rutube...
Фото
📌 Сегодня МГКЛ на Форуме Московской биржи по корпоративному управлению
Представители Группы принимают участие в форуме в Москве. Для нас это возможность обменяться опытом с коллегами и обсудить практики...
Фото
Сделки в портфеле PRObonds ВДО - останавливаем покупку Эконивы
В портфеле PRObonds ВДО останавливаем покупку Эконивы, 79 строка в последней таблице сделок. Набранная позиция будет 0,6% от активов....
Фото
Банковский сектор сентябрь 2026 г. - рекордная прибыль, но рост все менее равномерный
Банки отчитались за сентябрь. Что интересного мы узнали?  За 12 месяцев прибыль сектора составляет уже 4,5 трлн руб. при прогнозе ЦБ 3,9–4,4...

теги блога Sev Kav

....все тэги



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