是否有官方文档来解决 NetLogo 5.0.5 编程指南中这两个语句之间的明显冲突:
“补丁的坐标始终是整数”(来自 Agents section )
“NetLogo 中的所有数字都在内部存储为 double float ”(来自同一页面上的 Math 部分。)
这就是我问的原因:如果整数补丁坐标存储为非常接近整数值的 float ,那么我应该避免比较相等性。例如,如果确实没有整数,则改为
if pxcor = pycor...
我应该使用通常的容差检查,例如
if abs( pxcor – pycor) < 0.1 ...
是否有官方说法表明不需要更复杂的代码?
数学部分似乎也暗示了整数文字的缺失:“3 和 3.0 之间没有区别”。那么官方政策是避免将相等性与常量进行比较吗?例如,是否有官方批准编写这样的代码
if pxcor = 3...
?
slider 是否在某处定义以产生浮点值?如果是这样,那么比较 slider 值是否相等似乎也是无效的。也就是说,如果是这样,应该避免编写类似的代码
if pxcor = slider-value
即使 slider 的最小值、最大值和增量值看起来像整数。
这个问题之所以关注官方来源,是因为我不仅仅是想编写一个工作程序。相反,我试图告诉学生他们应该如何编程。我不想误导他们,所以感谢您提供任何好的建议。
最佳答案
NetLogo 并不是唯一一种以这种方式工作的语言,所有数字在内部都存储为 double 浮点。最著名的其他此类语言是 JavaScript。
NetLogo 中的数学如下 IEEE 754 ,因此接下来的内容实际上并不特定于 NetLogo,而是普遍适用于 IEEE 754。
用户手册中没有矛盾,因为从数学上来说,某些 float 是整数,完全。如果小数部分恰好为零,那么从数学上讲,它是一个整数,并且 IEEE 754 保证算术和比较运算的行为符合您的预期。如果将 2 和 2 加起来,您将始终得到 4,而不是 3.999... 或 4.00...01。整数输入,整数输出。这适用于比较、加法、减法、乘法和除法等除法。 (它可能不适用于其他操作,因此例如 log 1000 10
不完全是 3,cos 90
不完全是 0。)
因此 if pxcor = 3
是完全有效、正确的代码。 pxcor
从来没有小数部分,3
也没有小数部分,因此不会出现浮点不精确的问题。
对于NetLogo slider ,如果 slider 的min、max和increment都是整数,那么就没有什么可担心的; slider 的值也始终是整数。
(注意:我是 NetLogo 的首席开发人员,我编写了您引用的用户手册的部分。)
关于netlogo - 我什么时候可以将 NetLogo 值作为整数进行比较?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20929622/