Блог им. 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:
Фото
USD/JPY: иена росла на ожиданиях и упала на фактах, но пытается отбиться
Японская иена сначала продолжила укрепляться, однако затем развернувшись заметно ослабла. В этот период фактором укрепления иены были изменения...
ФосАгро в лидерах роста на Мосбирже
Акции ФосАгро 22 сентября растут на 4,8%, до 5285 руб. На наш взгляд, в первую очередь котировка повторяет движение российского фондового рынка в...
Фото
Акции ВТБ на минимумах. Что будет дальше?
Дарья Фёдорова Акции ВТБ обновляют минимумы перед допэмиссией, которую банк планировал провести до конца сентября, и торгуются около...
Фото
Мозговой штурм: какие идеи в моменте?
Доброго вечера. Сегодня мы провели традиционный мозговой штурм. Выпишу некоторые идеи:

теги блога Sev Kav

....все тэги



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