![見出し画像](https://assets.st-note.com/production/uploads/images/109326984/rectangle_large_type_2_ae1769608509f4d81518e716044b32c1.png?width=1200)
みなさんJavascriptに自信はありますか??
今回はベトナム出身#エースが記事を担当します。
いきなりですが、ここで問題です。
問題: (0.1 + 0.2) と 0.3 を比較するとどうなるでしょう?
考えなくても、どちらも0.3なので
比較するまでもないのでは?と思われているかと。
実際に検証していきましょう!
Javascriptで実際に計算してみよう!
実際に問題文をJavascriptに打ち込んでみました。
console.log(0.1 + 0.2 === 0.3); // 結果: false
結果は”false”(正しくない)!!??
![](https://assets.st-note.com/img/1687855755912-Rabuvupr3Q.png?width=1200)
この結果は、みなさんの予想とは違いますよね。
どちらも 0.3 なので”false”(正しくない)ではなく
”true”(正しい)になるはず!!
しかし、実際には等しくないんです。
これは、浮動小数点数の精度の制約によるものです。
試験対策にも👀!
基本情報技術者試験にも浮動小数点数の問題が過去問で出題されているので
一緒に抑えていきましょう!!
浮動小数点数とは?
浮動小数点数とは、コンピュータにおける数値を表現する方法の一つで、
主に小数点を含む数値を表現するときに利用するものです。
Javascriptの浮動小数点数は、2進数で内部的に表現されます。
しかし、0.1や0.2のような小数は、2進数に完全に変換することができません。単純な小数点数でも桁数が多くなって分かりにくくなる為です。
そのため、計算結果には微小な誤差が含まれることがあります。
フローティングポイント(浮動小数点数)は、
プログラミングにおける数値のデータ型であり、
実数(小数点以下を持つ数)を表現するために使用されます。
どこが”false”(正しくない)か確認してみよう!
実際にJavascriptで 0.1 + 0.2 の計算をすると
結果は0.30000000000000004となります。
console.log(0.1 + 0.2); // 結果: 0.30000000000000004
このように、0.1 + 0.2 の結果は 0.3 とは一致しません。
このような計算結果の誤差は、浮動小数点数の性質によるものです。Javascriptでは、浮動小数点数の比較には注意が必要です。
等値比較を行う場合は、誤差を考慮する必要があります。
解決方法
Javascriptで 0.1 + 0.2と 0.3 を正確に比較するためには、
以下のような方法があります。
console.log(Math.abs(0.1 + 0.2 - 0.3) < Number.EPSILON); // 結果: true
解説
上記画像で使用されている【 Number. EPSILON 】とは、
1 と数値形式で表現できる次に大きな数値との差です。
これは、倍精度浮動小数点数形式では仮数部を 52 ビットでしか表現できず、最低ビットは 2-52 で表されるためです。
このコードでは、Math.abs()関数を使用して誤差を絶対値に変換し、Number.EPSILON(非常に小さい値)と比較しています。
これにより、ほぼ等しいと見なし、誤差を許容することができます。
最後に
Javascriptの数値計算において、
浮動小数点数の性質を理解し、誤差を考慮することは重要です。
特に金銭計算などで正確な結果を必要とする場合には、注意が必要です。
適切な比較方法を使用して、正確な数値計算を行うように心がけましょう。
以上、今回は実践的な記事をお送りしました!
最後までご覧いただきありがとうございました!
今後も社内報から実践までいろいろな情報を発信します。
お楽しみに!
以下から会社のサイトに飛べます!