NodeMCU Integer与Float固件有什么不同?

时间:2016-10-27 16:56:31

标签: nodemcu

我问自己整数和浮点固件之间有什么区别以及如何处理它们。到目前为止我能找到的只有:

  

仅支持整数运算的整数版本和包含浮点计算支持的float版本

好的,到目前为止一切都那么好,但是wat在现实生活中是否意味着什么?

当我计算

时会发生什么
a = 3/2

对于浮动版本,我希望a = 1.5 对于整数版本我预期a = 1.或者等于2或者它会抛出错误或崩溃或其他什么?我知道,我可以简单地刷一下整数版并尝试一下,但我也想讨论它在这里回答它。 :)

还存在哪些其他限制/差异?我问的主要原因是:我试图在整数版本上运行一些脚本而没有任何浮动操作我知道并且某些功能根本就不存在。使用float版本它可以按预期工作。

更新

这是产生意外结果的片段:

local duration = (now - eventStart)

整数固件的持续时间为0。我猜这是因为现在eventStart对于整数来说太大了:

now: 1477651622514913
eventStart: 1477651619238587

所以我说其他限制是整数版本只支持31位值的整数运算,因为我转换时

now = tonumber(now)

now = 2147483647,即2 ^ 31 - 1

所以整数固件

1477651622514913 - 1477651619238587 = 0

相同
2147483647 - 2147483647

显然是0

2 个答案:

答案 0 :(得分:3)

你自己回答了你的问题。整数版本不支持浮点运算,也不允许非整数运算。

在整数版本中,3/2是1而不是1.5。

  

我可以简单地刷一下整数版并尝试一下,但我也想讨论它。 :)

Stack Overflow是一个Q& A网站,因此不适合讨论。请使用esp8266.com上的NodeMCU论坛。

答案 1 :(得分:1)

NodeMCU developer FAQ说:"整数构建具有较小的Flash占用空间并且执行速度更快,但在整数中工作也存在许多陷阱"

您已经发现了 32位signed int 数字大小限制的一些陷阱。
不知道其他人可能有什么,个别软件模块可能有自己的。

"较小":通常约13kB的差异 custom 1.5.4.1final builds总计369-478kB

" 更快":here is a comparison of integer and floating point operations,如果您想运行自己的基准来源,请使用基准来源。总体而言:int操作几乎快8倍。当浮点数是整数时,差异可能会更小。