ゲームが作れるようになるまでがんばる日記

ゲーム制作のことを中心にゲームに関することを書いています

floatの精度

ゲームプログラマになる前に覚えておきたい技術で次のような気になる文章が。

float変数に1を1億回足した答えは1677万だ。

floatの演算で計算誤差が出ることは知っていたけど、そこまで精度が無いとは。
ということで実際に試してみた。

#include <iostream>
using namespace std;

int main()
{
    float sum = 0.0f;
    for(int i=0; i<100000000; ++i)
    {
        sum += 1.0f;
    }
    cout.setf(ios::fixed);
    cout << sum;
}

実行結果
16777216.000000

おお、確かに。試しにdoubleにしてみたら1億となり、正しい答えが得られた。
float演算は自分が思っていたよりも精度が無いということを覚えておかないと。