4
當我在Lua執行0.1 + 0.2
時,我完全得到0.3
。如果我在Ruby或Python中執行相同的操作,則獲得0.30000000000000004
。我理解浮點舍入錯誤,但爲什麼在Lua中不會出現這個問題? Lua有什麼不同?Lua的浮點處理與其他語言有何不同?
當我在Lua執行0.1 + 0.2
時,我完全得到0.3
。如果我在Ruby或Python中執行相同的操作,則獲得0.30000000000000004
。我理解浮點舍入錯誤,但爲什麼在Lua中不會出現這個問題? Lua有什麼不同?Lua的浮點處理與其他語言有何不同?
0.1+0.2
確切地說不是0.3
。試試這個代碼:
print((0.1+0.2)==0.3)
print(string.format("%.17g",0.1+0.2))
我假設你正在使用print
或io.write
打印這些值。在這種情況下,Lua只是不打印所有數字。在內部,Lua使用全長本地浮點表示。技術上的解釋是print
和io.write
格式編號採用luaconf.h
中定義的LUA_NUMBER_FMT
中的格式,默認爲"%.14g"
。
順便說一句,爲什麼這個參數不是「%.16g」(所以所有可以正確存儲在double中的整數都能正確顯示)? –
@EricPostpischil - 我在詢問'luaconf.h'中定義的'LUA_NUMBER_FMT'值,而不考慮這個SO問題。爲什麼它被選爲「%.14g」? –
@EgorSkriptunoff:啊,我明白了。 –