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

问题描述 投票:10回答:2

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

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

好的,到目前为止一切顺利,但这在现实生活中意味着什么?

当我计算时会发生什么

a = 3/2

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

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

更新:

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

local duration = (now - eventStart)

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

now: 1477651622514913
eventStart: 1477651619238587

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

now = tonumber(now)

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

所以在整数固件中

1477651622514913 - 1477651619238587 = 0

是相同的

2147483647 - 2147483647

这显然是0

nodemcu
2个回答
3
投票

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

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

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

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


1
投票

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

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

“较小”:通常在custom 1.5.4.1final builds上的差值约为13kB,总计369-478kB

“更快”:here is a comparison of integer and floating point operations,如果您想运行自己的基准源代码。总体而言:int操作快了近8倍。当浮点数是整数时,差异可能会更小。

© www.soinside.com 2019 - 2024. All rights reserved.