広告スペース(バナー)
🐹Go レッスン
基本文法の基礎8
データ構造とオブジェクト指向7
構文の基本を深める9
関数とデータ構造の応用9
アルゴリズムとテストの基礎8
文字列・数値操作の応用8
実務で役立つ機能8
アルゴリズム練習問題10
レッスン 57 / 68

浮動小数点の誤差に気をつけよう

このレッスンでは、Goにおける浮動小数点の誤差について学び、小数計算で思わぬ結果になる理由を理解することを目標にします。「Go言語 浮動小数点 誤差」で調べている方向けです。

コンピュータは小数を2進数で扱うため、0.1 + 0.2のような単純な計算でも、ぴったり0.3にならないことがあります。表示すると誤差がそのまま見え、比較するとfalseになります。

サンプルコードでは、a := 0.1b := 0.2とfloat64の変数に入れてからfmt.Println(a + b)を実行すると0.30000000000000004という誤差を含んだ値が表示され、a+b == 0.3という比較がfalseになる様子を確認できます。なお、0.1 + 0.2と定数のまま書くとGoはコンパイル時に高精度で計算してしまうため誤差が出ません。誤差を体験するには、いったん変数に入れて実行時の計算にする必要があります。

初心者がよくつまずくのが、小数同士を==で直接比較して、期待通りの結果が得られないことです。IEEE754という国際標準規格に基づいてこの誤差が生じる仕組みを知っておくと、原因への理解が深まります。

実際の開発現場では、金額計算のような正確さが求められる処理では、整数(円ではなく銭単位など)で計算するといった工夫が必要になります。

📖 お手本コード
✍️ あなたのコード
コードを書いたら「実行する」を押してください

🧪 このサイトではGoを直接コンパイル・実行できないため、お手本コードと同じ内容を入力できたかをその場で判定します(採点はブラウザ内だけで行われ、どこにも送信されません)。

🎯
ここまでできればゴール達成!
金額計算で誤差が出ないよう工夫された、正確な電卓が作れるようになります。
広告スペース(バナー)
広告スペース(記事内)