netlogo - 我什么时候可以将 NetLogo 值作为整数进行比较?

标签 netlogo

是否有官方文档来解决 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/

相关文章:

if-statement - 如果 elseif elseif else 在 netlogo 中

plot - 在同一个图表上创建多个绘图?

java - NetLogo - 读取和写入文本文件以供 Java API 使用

string - 如何修剪 NetLogo 中的空格

user-agent - 如何在NetLogo中创建迷宫墙?

netlogo - 如何在某个点创建固定数量的海龟?

netlogo - 如何在 Netlogo 中计算死去的海龟

list - Netlogo:如何为列表中的每只海龟创建链接?

NetLogo 实验设置

netlogo - 是否有可能有一个带有两个条件(ticks mod 和概率)的 ifelse 语句?