NodeMCU整型与浮点型固件有什么不同?

13

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

整数版本只支持整数运算,浮点版本包含支持浮点计算的内容。

好的,到目前为止都很好,但在实际生活中这意味着什么?

当我进行计算时会发生什么?

a = 3/2

对于浮点版本,我期望a = 1.5。对于整数版本,我期望a = 1。或者a将等于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。

2个回答

5
您自己已经回答了您的问题。整数版本不支持浮点运算,也不允许非整数数字。
在整数版本中,3/2为1,而不是1.5。
“我可以简单地闪存整数版本并尝试一下,但我也想讨论一下。 :)”
Stack Overflow是一个问答网站,因此不适合讨论。请使用esp8266.com上的NodeMCU论坛进行讨论。

谢谢您回答问题的一部分。还有其他差异或限制吗?如果没有,为什么脚本可以在浮点数上运行而不是整数可能的原因是什么? - Michi
我想不出其他原因,但是如果没有看到代码,我们就无法确定。 - Marcel Stör

5

NodeMCU开发者常见问题解答中提到:“整数构建具有更小的Flash占用空间和更快的执行速度,但在整数计算中也存在一些陷阱”。

您已经发现了使用32位有符号整数时数量大小限制的一些陷阱。
其他可能还有什么问题,每个软件模块可能都有自己的问题。

“更小”: 自定义1.5.4.1final构建通常会产生大约13kB的差异,总计369-478kB

更快”: 这里是整数和浮点运算的比较, 如果您想运行自己的基准测试,则可获取基准源代码。总体来说,整数运算几乎要快8倍。当浮点数为整数时,差异可能会更小。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接