web-dev-qa-db-ja.com

NodeMCU整数とフロートファームウェアの違いは何ですか?

整数ファームウェアと浮動小数点ファームウェアの違いは何ですか、そしてそれらをどのように扱うかを自問していました。これまでに見つけたのは次のとおりです。

整数演算のみをサポートする整数バージョンと浮動小数点計算のサポートを含む浮動小数点バージョン

さて、これまでのところ良いですが、これは実際の生活ではどういう意味ですか?

計算するとどうなりますか

a = 3/2

フロートバージョンの場合はa = 1.5と予想します。整数バージョンの場合はa = 1と予想します。または2に等しいか、エラーやクラッシュなどをスローしますか?整数バージョンをフラッシュして試してみることができたのはわかっていますが、 それについて話し合う ここで答えてもらいます。 :)

他にどのような制限/違いがありますか?私が尋ねている主な理由:私が知っているfloat操作なしで整数バージョンでいくつかのスクリプトを実行しようとしましたが、いくつかの機能が単にそこにありません。フロートバージョンでは、期待どおりに機能します。

更新:

予期しない結果を生成するスニペットは次のとおりです。

local duration = (now - eventStart)

整数ファームウェアの場合、期間は0です。これは、eventStartが整数に対して大きすぎるためだと思います。

now: 1477651622514913
eventStart: 1477651619238587

したがって、他の制限は、整数バージョンは31ビット値の整数演算のみをサポートすることです。

now = tonumber(now)

今= 2147483647、つまり2 ^ 31-1

整数ファームウェアでは

1477651622514913 - 1477651619238587 = 0

と同じです

2147483647 - 2147483647

これは明らかに0です

10
Michi

NodeMCU開発者向けFAQ は次のように述べています。「整数ビルドはFlashフットプリントが小さく、実行速度も速くなりますが、整数での作業には多くの落とし穴もあります」

32ビットのsigned intの数のサイズ制限に関するいくつかの落とし穴を見つけました。
他に何があるかわからない、個々のソフトウェアモジュールが独自のものを持っているかもしれない。

「小さい」:通常約13kBの差カスタム1.5.4.1最終ビルド 合計369-478kB

"faster": 整数演算と浮動小数点演算の比較です 、必要に応じてベンチマークソースを使用自分で実行します。全体:int操作はほぼ8倍高速です。浮動小数点数が整数の場合、差は小さくなる可能性があります。

2
kaay

あなたは自分の質問に自分で答えました。整数バージョンは浮動小数点演算をサポートしておらず、整数以外の数値も許可していません。

整数バージョンでは3/2は1.5ではなく1です。

整数バージョンをフラッシュして試してみることができましたが、それについても説明したいと思います。 :)

Stack OverflowはQ&Aサイトであるため、ディスカッションにはあまり適していません。そのためには、esp8266.comのNodeMCUフォーラムを使用してください。

4
Marcel Stör