请使用输出检查下面的NetLogo代码。
CODE:
to create-files
let i 0.10
while[i < 1]
[
set i i + .05
show i
]
end
输出:
observer: 0.15000000000000002
observer: 0.2
observer: 0.25
observer: 0.3
observer: 0.35
observer: 0.39999999999999997
observer: 0.44999999999999996
observer: 0.49999999999999994
observer: 0.5499999999999999
observer: 0.6
observer: 0.65
observer: 0.7000000000000001
observer: 0.7500000000000001
observer: 0.8000000000000002
observer: 0.8500000000000002
observer: 0.9000000000000002
observer: 0.9500000000000003
observer: 1.0000000000000002
我想知道更新错误的原因是什么?有一些约。发生了什么?如何避免呢?
答案 0 :(得分:3)
看看the section on floating-point accuracy in the NetLogo programming guide。实际上,每种广泛使用的编程语言都存在同样的问题。基本上,为了能够代表真正的小数字和非常大的数字,你会遇到这样的问题。
一个简单的解决方法是使用precision
将数字四舍五入到您想要的小数。在您的情况下,您可能想要:
to create-files
let i 0.10
while[i < 1]
[
set i precision (i + .05) 2
show i
]
end
答案 1 :(得分:2)
布莱恩说。但请注意:
to create-files
let i 2
while [i < 20] [
set i i + 1
show i / 20
]
end
打印:
observer: 0.15
observer: 0.2
observer: 0.25
observer: 0.3
observer: 0.35
...