【Unity】float型とdouble型の変数は何が違うの?

floatとdoubleの違い Unity

こんにちは、ともくんのゲーム作り部屋にようこそ!

このページでは、

「float型とdouble型ってどんな違いがあるの?」

「いつもfloat型だけを使っているけど、大丈夫なのかな?」

というお悩みの方に向けた内容となっています。

Unityなどで小数点を取り扱う変数の型として、float型double型の2つがあります。

このfloat型とdouble型の主な違いは、取り扱える有効桁数が異なることです。

実際に、僕もプログラミングを勉強し始めて、「小数点を取り扱う = float型」として使っていたので、double型と何の違いがあるのかよく理解していませんでした。

そこで、このページでは、Unityでゲーム制作していく際に、小数点を取り扱う変数の型であるfloat型とdouble型の違いについてまとめていきます。

この記事を書いた人

ゲーム作りを学び始めた一児のパパです。
このブログは、子供から「ゲームを作ってみたい!」と言われ、非プログラマーでゲーム作りをしたことない僕が、ゲーム作りの本を読んで独学でゲーム開発を学んでいるブログです。
同じように初めてゲーム作りをしている方と一緒に学んでいけるようなブログに出来たらいいなと思っています。
また、「このコードはおかしい」とか「もっと良い書き方があるよ!」などあれば、どんどん指摘して頂けると助かります。

float型とdouble型の違い

float単精度浮動小数点型double倍精度浮動小数点型と呼ばれる変数の型で、

  • 取り扱える有効桁数が違う
  • メモリのサイズが違う

という違いがあります。

取り扱える有効桁数が違う

float型とdouble型の最も大きな違いは、取り扱える有効桁数の違いです。

具体的には、float型約7桁の有効桁数を持ち、double型約15桁の有効桁数を持つことができ、取り扱える数に違いがあります。

例えば「123.456」という数字であれば有効桁数が6桁の数字なので、float型でもdouble型でも以下のようにしっかりと数字を取り扱うことができます。

using UnityEngine;

public class Test : MonoBehaviour
{
    float f_num = 123.456f;
    double d_num = 123.456;

    void Start()
    {
        Debug.Log("float型では" + f_num);
        Debug.Log("double型では" + d_num);
    }
}

なお、float型で数値を入れる際は、数値の後ろに「f」を書いてfloat型の数値を代入していることを表します。

一方で「123.456789」という数字の有効桁数は9桁なので、double型であれば問題ありませんが、float型では入りきらないので、7桁を超える分の数字(ここでは「89」)が四捨五入で丸められて「123.4568」と表示されています。

using UnityEngine;

public class Test : MonoBehaviour
{
    float f_num = 123.456789f;
    double d_num = 123.456789;

    void Start()
    {
        Debug.Log("float型では" + f_num);
        Debug.Log("double型では" + d_num);
    }
}

そのため、

ということになります。

メモリのサイズが違う

float型とdouble型で取り扱える有効桁数に違いがあるのが分かりましたが、

それなら有効桁数の大きいdouble型だけ使えばいいの?

と思ってしまいますが、もう一つ違いがあります。

それが、それぞれの変数のメモリサイズによる違いです。

float型4バイト(32ビット)のメモリサイズを使用しているのに対して、double型はfloat型の2倍である8バイト(64ビット)のメモリサイズを使用しています。

つまり、double型は取り扱える有効桁数が大きい分、メモリも大きく、処理に時間がかかりやすいということになります。

float型とdouble型のどちらを使えば良いか?

float型とdouble型には、取り扱える有効桁数メモリサイズに違いがあることが分かりましたが、使い分ける際は何を重要視するかになってくるかと思います。

具体的には、

  • 有効桁数が小さいならfloat型
  • 有効桁数が大きいなら処理速度か数字の精度かで決める

となってくるのかと個人的には考えています。

有効桁数が小さいならfloat型

有効桁数が小さい数字(7桁以下)を取り扱うのであれば、float型で問題無いかと思います。

float型であれば、メモリサイズも少なく済み、わざわざ大きいdouble型で準備する必要がありません。

ただし、途中の計算式の段階で有効桁数が増えてしまう場合も考えられるので、注意しておきましょう。

有効桁数が大きいなら処理速度か精度かで決める

有効桁数が大きい数字(7桁を超える)を取り扱う場合は、その数字を何に使うかで決めていく必要があります。

分かりやすく言えば、

  • 誤差を減らして処理したいのであればdouble型
  • 速度をあげて処理したいのであればfloat型

を選択することになります。

つまり、有効桁数の大きい数字は、数字の精度をどこまで求めるかで変数の型を変えていくのが良さそうです。

まとめ

このページでは、Unityでゲームを作る際に小数点用の変数の型として使うfloat型とdouble型について、どういう違いがあるのか、また使い分け方をまとめていきましたが、いかがでしたでしょうか?

float型とdouble型の大きな違いは、取り扱える有効桁数メモリサイズによる違いがあります。

float型は約7桁の有効桁数を持ち、サイズが4バイト(32ビット)なのに対して、double型は約15桁の有効桁数を持ち、サイズが8バイト(64ビット)という違いがあります。

そのため、数字の精度を求めるならdouble型、処理速度を求めるならfloat型で変数を作っていくのが良いでしょう。

最後までお読みいただきまして、ありがとうございました!

コメント