2016-07-07 3 views
3

У меня есть цикл Lua for, который итерации через числа от -1 до 1 с шагом 0,01 и производит номера так же плохо, как 6.6613381477509e-016 в диапазоне - 0,1 до 0,1 (эксклюзив)lua десятичные знаки разрываются вокруг -0,1 до 0,1 (эксклюзивно)

Я использую Lua в ЛЮБВИ двигателя (v 0.9.2), написанный на C++

Я предпочел бы решить эту проблему, чем просто получить информационную свалку объяснения, но Я бы предпочел это, чем ничего.

(также я понимаю общую причину поплавки являются неточными, так что могут быть исключены из объяснений)

+0

Я не вижу, как 6.6613381477509e-016 является плохой номер. Он появляется между -0.01 и 0.01, правильно? –

+0

Покажите нам код. Если вы получили это значение, начиная с «-1.0» и увеличивая на «0.01» 100 раз, я бы не удивился. –

+0

В моей системе это: 'lua -e '= -1 для i = 1,100 do x = x + 0.01 end print (x)'' prints '7.5286998857393e-16' –

ответ

6

Вы уже известны причины, вот возможное решение: не цикл с числами с плавающей точкой , используйте целые числа.

Вместо

for i = -1, 1, 0.01 do 

использования:

for i = -100, 100 do 
    print(i/100) 
end 
Смежные вопросы