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

Mic*_*Kaa 10 nodemcu

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

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

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

当我计算时会发生什么

a = 3/2
Run Code Online (Sandbox Code Playgroud)

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

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

更新:

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

local duration = (now - eventStart)
Run Code Online (Sandbox Code Playgroud)

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

now: 1477651622514913
eventStart: 1477651619238587
Run Code Online (Sandbox Code Playgroud)

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

now = tonumber(now)
Run Code Online (Sandbox Code Playgroud)

现在= 2147483647,这是2 ^ 31 - 1

所以在整数固件中

1477651622514913 - 1477651619238587 = 0
Run Code Online (Sandbox Code Playgroud)

是相同的

2147483647 - 2147483647
Run Code Online (Sandbox Code Playgroud)

这显然是0

Mar*_*tör 5

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

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

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

Stack Overflow 是一个问答网站,因此不太适合讨论。为此,请使用 esp8266.com 上的 NodeMCU 论坛。


kaa*_*aay 5

NodeMCU 开发人员常见问题解答称:“整数构建具有更小的闪存占用空间并且执行速度更快,但在整数中工作也存在许多陷阱”

您已经发现了32 位有符号 int数字大小限制的一些陷阱。
不知道还有哪些其他模块,各个软件模块可能有自己的模块。

“较小”:自定义 1.5.4.1final 版本通常有 13kB 左右的差异,总计 369-478kB

更快”:这里是整数和浮点运算的比较,如果您想运行自己的基准源,则可以使用基准源。总体而言: int 操作几乎快了 8 倍。当浮点数为整数时,差异可能会更小。