java 浮動小数点 float型 表現範囲に関して質問がございます。
±3.40282347E+38~ 1.40239846E-45
1.±3.40282347E+38の「±」が」つく理由がわかりません。範囲なのに、なぜ2つの値からスタートするんですか?
2.+3.40282347E+38の方が1.40239846E-45よりも値が大きいのに、なぜ右側に記載されているんですか?
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
ベストアンサー
範囲なのに、なぜ2つの値からスタートするんですか?
浮動小数点数の仕組み上、絶対値の大きい方と小さい方、それぞれに限度があります(0は別枠で表現できますが)。使える範囲は「-3.40282347E+38~-1.40239846E-45」と「±0」と「1.40239846E-45~3.40282347E+38」となります。
+3.40282347E+38の方が1.40239846E-45よりも値が大きいのに、なぜ右側に記載されているんですか?
おそらく、特別な意味はないです。ただ、「極端に小さな値」より「極端に大きな値」のほうが問題になるケースが多いので、先に書いたのかもしれません。
投稿2020/03/18 09:02
総合スコア145932
0
java 浮動小数点 float型 表現範囲に関して質問がございます。
±3.40282347E+38~ 1.40239846E-45
1.40239846E-45 ではなく、1.40129846E-45 ではありませんか?
Java
1class F { 2 public static void main(String[] args) { 3 print(0x00000000); 4 print(0x00000001); 5 print(0x007fffff); 6 print(0x00800000); 7 print(0x7f7fffff); 8 print(0x7f800000); 9 print(0x7f800001); 10 print(0x7fffffff); 11 } 12 13 static void print(int i) { 14 float f = Float.intBitsToFloat(i); 15 System.out.println(String.format("%08x: %.8e", i, f)); 16 } 17}
実行結果
00000000: 0.00000000e+00 00000001: 1.40129846e-45 007fffff: 1.17549421e-38 00800000: 1.17549435e-38 7f7fffff: 3.40282347e+38 7f800000: Infinity 7f800001: NaN 7fffffff: NaN
00000000 は +ゼロ
00000001~007fffff は非正規化数
00800000~7f7fffff は正規化数
7f800000 は無限大
7f800001~7fffffff は非数(Not a Number)
80000000~ffffffff は負数
投稿2020/03/18 10:38
総合スコア8224
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/03/18 10:05
2020/03/18 10:08
2020/03/18 15:32