スポンサーリンク
※サイト運営にサーバーは必須です※
~ ロリポップ! はコスパのよい初心者向けサーバーです~
目次
double型の基本情報
ビット数:64
最大値:1.79769313486232E+308
最小値:-1.79769313486232E+308
ゼロに近い最小の数:4.94065645841247E-324
考え方
※基本的な考え方は浮動小数点型であるfloat型と同じです。以下の説明は、かなり端折っています。
詳しく考え方を追いたい場合は→float型についてわかったことをまとめる
double型の64ビットは以下のように割り振られます。
1ビット:符号(+か-か)
11ビット:指数部(最大で、2の(1023乗)の数字)
52ビット:仮数部(1以上2未満の数字)
最大値について
指数部には11ビットあるので、0~2047までの2048通りの数字が扱えます。
※2048は2の11乗
0~2047の内、0(0と0に近い数字を扱う)と2047(無限大を扱う)は、用途が少し特殊です。
この二つを除いた2046通りで、2の(-1022乗)~2の(1023乗)まで扱えます。
そのため2の10乗が10の3乗とほぼ等しいことを利用して考えますと、
2の(10乗) ≒10の(3乗)
→2の(1023乗) ≒10の(306.9乗)
正確に計算すれば、10の(307乗)のオーダーになります。
これに仮数部が最大値に近い値(2に限りなく近い数字)を取るとき、最大値となります。
※最大値は10の308乗オーダー。
ゼロに近い最小の値について
一方で、ゼロに近い最小の値は指数部の数字が0~2047の内、0の場合です。
指数部の数字が0の場合に扱える数字の範囲は
「x.xxxxxx」×2の(-1023)乗です。
※「x.xxxxxx」には仮数部の数字が入ります。
最小の数となるのは「0.00…001」(2の(-51乗)に相当)の時です。
以上から2の(-1074)乗の時がゼロに近い最小の数を取ります。
有効数字について
最後に、有効数字は2進数で53桁分あります。
※52にプラス1されているのは、ケチ表現によって、1桁分得するからです。
2の53乗≒10の15.9乗
で、10進法で有効数字は15桁あることがわかります。
※以下のコードでは、double型の正しさをdouble型で確かめるというかなり怪しい行為をしています。(言語C#)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace double01 { class Program { static void Main(string[] args) { Console.WriteLine("double型の最大値は" + double.MaxValue); Console.WriteLine("double型の最小値は" + double.MinValue); Console.WriteLine("double型のゼロに近い最小の数は" + double.Epsilon); //実際に計算をして確かめる //2の1023乗 double pow_1023 = 1; for (int j = 1; j <= 1023; j++) { pow_1023 *= 2; } Console.WriteLine("2の1023乗は" + pow_1023); //仮数部が「111…」の時 double near_2 = 1; double num = 1; for (int j = 1; j <= 52; j++) { num /= 2; near_2 += num; } Console.WriteLine("仮数部が1番2に近くなるのは" + near_2); Console.WriteLine("double型の最大値を計算すると" + near_2 * pow_1023); //2の-1074乗 double min = 1; for (int j = 1; j <= 1074; j++) { min /= 2; } Console.WriteLine("double型のゼロに近い最小の数を計算すると" + min); //2の53乗(有効数字用) double pow_53 = 1; for (int j = 1; j <= 53; j++) { pow_53 *= 2; } Console.WriteLine("2の53乗は" + pow_53); } } } |
結果は、
double型の最大値は1.79769313486232E+308
double型の最小値は-1.79769313486232E+308
double型のゼロに近い最小の数は4.94065645841247E-324
2の1023乗は8.98846567431158E+307
仮数部が1番2に近くなるのは2
double型の最大値を計算すると1.79769313486232E+308
double型のゼロに近い最小の数を計算すると4.94065645841247E-324
2の53乗は9.00719925474099E+15
関連記事
~ギャンブルに絶対儲かる必勝法があるのだろうか?~
私(サイト主)はこの疑問に対して非常に興味を持ち、プログラミングで検証してみました。
このサイトを応援してもいいかなと思う人はぜひとも購入を検討してみてください。