Sahara's WebLog

日記のような、備忘録のような、うらみつらみのような、自慢のような…。

Arduino IDE - Serial.print()でfloatは初期値では少数以下2桁まで -

ESP8266でこういうスケッチを走らせると、deg = 90 の時にも s == 1 の処理に入ってくれない。
何でだよ、sin(90) = 1 だろがっ!
と言い張っても無駄だ。
というお話。

※理由
deg = 90 のとき、deg * 3.14 / 180 は 1.57 なので、sin の値はきっちり 1 にはならない。
およそ s = 0.99999968293183462021052992382333 である。
よって s == 1 は決して真にはならない。
float_sin_01
ちなみにπの値の精度を上げて sin(1.5707963267948966192313216916398) とかするなら1といえる。
float_sin_02
以上、面倒なので関数電卓で示したが、C言語上でも似たようなもんだろう。
結局のところ、sin()の引数がfloatという、いままであまり使ったことのない型だったのが発端と言える。
※勘違いの原因
Serial.print()で桁数を指定しないでfloatを表示すると小数点以下2桁に丸めて表示する。
したがって、シリアル・モニターには 1.00 と表示される。
これを見て、てっきり s == 1 だと思い込んでしまった。
Serial.print(s, 10);
とかにしとけばすぐに気付いたのに。
ESP8266関連記事一覧へ

このエントリーをはてなブックマークに追加

Posted under: Arduino, ESP8266


コメントを残す

メールアドレスが公開されることはありません。

Time limit is exhausted. Please reload CAPTCHA.