何时可以将NetLogo值作为整数进行比较?

何时可以将NetLogo值作为整数进行比较?,netlogo,Netlogo,是否有官方文件来解决NetLogo 5.0.5编程指南中这两个声明之间的明显冲突: “面片的坐标始终是整数”(来自) “NetLogo中的所有数字在内部存储为双精度浮点数”(来自同一页的部分) 这就是为什么我要问:如果整数面片坐标存储为非常接近整数值的浮点数,那么我应该避免进行相等比较。例如,如果真的没有整数,而不是 if pxcor = pycor... 我应该使用通常的公差检查,比如 if abs( pxcor – pycor) < 0.1 ... ? 是否在某个地方定义了滑块

是否有官方文件来解决NetLogo 5.0.5编程指南中这两个声明之间的明显冲突:

  • “面片的坐标始终是整数”(来自)

  • “NetLogo中的所有数字在内部存储为双精度浮点数”(来自同一页的部分)

这就是为什么我要问:如果整数面片坐标存储为非常接近整数值的浮点数,那么我应该避免进行相等比较。例如,如果真的没有整数,而不是

if pxcor = pycor...
我应该使用通常的公差检查,比如

if abs( pxcor – pycor) < 0.1 ...
?

是否在某个地方定义了滑块以生成浮点值?如果是这样,比较滑块值是否相等似乎也是无效的。也就是说,如果是这样的话,应该避免像这样编写代码

if pxcor = 3...
if pxcor = slider-value
即使滑块的最小值、最大值和增量值看起来像整数


在这个问题上对官方来源的关注是因为我不仅仅是想写一个工作程序。相反,我想告诉学生他们应该如何编程。我不想误导他们,所以谢谢你的建议。

NetLogo不是唯一一种这样工作的语言,所有数字都以双精度浮点形式存储在内部。最著名的其他此类语言是JavaScript

NetLogo中的数学是这样的,所以下面的内容实际上并不特定于NetLogo,但通常适用于IEEE 754

用户手册中没有矛盾,因为从数学上讲,一些浮点数就是整数。如果分数部分正好为零,那么从数学上讲,它是一个整数,IEEE 754保证算术和比较运算的行为与您预期的一样。如果你加上2和2,你总是得到4,而不是3.999。。。或者4点…01分。整数输入,整数输出。这适用于比较、加法、减法、乘法和等分除法。(它可能不适用于其他操作,例如,
log100010
不完全是3,而
cos90
不完全是0。)

因此,
如果pxcor=3
是完全有效的,则正确的代码
pxcor
从来没有小数部分,而且
3
也没有小数部分,因此不会出现浮点不精确的问题

至于NetLogo滑块,如果滑块的min、max和increment都是整数,则无需担心;滑块的值也始终为整数


(注意:我是NetLogo的首席开发人员,我编写了用户手册中您引用的部分。)

NetLogo并不是唯一一种以这种方式工作的语言,所有数字在内部存储为双精度浮点。最著名的其他此类语言是JavaScript

NetLogo中的数学是这样的,所以下面的内容实际上并不特定于NetLogo,但通常适用于IEEE 754

用户手册中没有矛盾,因为从数学上讲,一些浮点数就是整数。如果分数部分正好为零,那么从数学上讲,它是一个整数,IEEE 754保证算术和比较运算的行为与您预期的一样。如果你加上2和2,你总是得到4,而不是3.999。。。或者4点…01分。整数输入,整数输出。这适用于比较、加法、减法、乘法和等分除法。(它可能不适用于其他操作,例如,
log100010
不完全是3,而
cos90
不完全是0。)

因此,
如果pxcor=3
是完全有效的,则正确的代码
pxcor
从来没有小数部分,而且
3
也没有小数部分,因此不会出现浮点不精确的问题

至于NetLogo滑块,如果滑块的min、max和increment都是整数,则无需担心;滑块的值也始终为整数


(注意:我是NetLogo的首席开发人员,我编写了用户手册中您引用的部分。)

只是为了强调Seth所写的内容:

整数输入,整数输出。这是为了比较,补充, 平均除法的减法、乘法和除法

下面是浮点不精确的一个典型实例:

observer> show (2 + 1) / 10
observer: 0.3
observer> show 2 / 10 + 1 / 10
observer: 0.30000000000000004

要找到解释原因的好链接,请查看

以强调赛斯所写的内容:

整数输入,整数输出。这是为了比较,补充, 平均除法的减法、乘法和除法

下面是浮点不精确的一个典型实例:

observer> show (2 + 1) / 10
observer: 0.3
observer> show 2 / 10 + 1 / 10
observer: 0.30000000000000004

要找到解释原因的好链接,请查看

这个伟大的解释大概是在“整数的范围是+/-9007199254740992(2^53,约9万亿)”的建议后面。如果我正确理解赛斯,对于该范围内的数字,相等的比较是正确的。正如稻草人所说,“但这太简单了!我应该想到它”谢谢你的解释。谢谢赛斯的解释:)这个伟大的解释大概是在“整数的范围是+/-9007199254740992(2^53,大约9万亿)的建议后面。”如果我正确理解赛斯,对于这个范围内的数字,平等性的比较是相互关联的。正如稻草人所说,“但那太容易了!我应该想到它的。”谢谢你的解释。谢谢赛斯的解释:)