Floatの謎
4020 ワード
まずいくつかの例を見てみましょう.
どのくらい出力されますか?
これはいくら出力されますか?
この出力はいくらですか?
第一題:0
第二題:0
第三題:デッドサイクル
さらに次の解析を見ると浮動小数点数の記憶とintがfloatを回すときの手順がわかる(JAva浮動小数点数剖析)
一、まず20000000のバイナリを見てみましょう
かっこ内は浮動小数点に変換して捨てる末尾になります
浮動小数点数に変換後
二、次に20000000+64を観察する
浮動小数点数に変換
20,000,000,000,000,000の浮動小数点ストレージとそっくり
三、次に20000000+65を観察する
明らかに
明らかに中間の数は下の数に近いので、浮動小数点化後
20,000,000,000,000の浮動小数点ストレージより1
したがって、前の2つのプログラムは0を印刷することで理解できます(ポイントは浮動小数点数に変換する方法と、尾を捨てる方法を知ることです).
四、1の浮動小数点表示
五、浮動小数点数の加減演算
階層:
段差30
従ってf++はfにほとんど影響を及ぼさない
だから死のサイクルになる!!!
public class Thirtyfirst1{
public static void main(String[] args){
int i = 2000000000;
int count = 0;
for(float f = i; f < i + 50 ; f ++){
count++;
}
System.out.println(count);
}
}
どのくらい出力されますか?
public class Thirtyfirst1{
public static void main(String[] args){
int i = 2000000000;
int count = 0;
for(float f = i; f < i + 64 ; f ++){
count++;
}
System.out.println(count);
}
}
これはいくら出力されますか?
public class Thirtyfirst1{
public static void main(String[] args){
int i = 2000000000;
int count = 0;
for(float f = i; f < i + 65 ; f ++){
count++;
}
System.out.println(count);
}
}
この出力はいくらですか?
第一題:0
第二題:0
第三題:デッドサイクル
さらに次の解析を見ると浮動小数点数の記憶とintがfloatを回すときの手順がわかる(JAva浮動小数点数剖析)
一、まず20000000のバイナリを見てみましょう
01110111 00110101 10010100 0(0000000)
かっこ内は浮動小数点に変換して捨てる末尾になります
浮動小数点数に変換後
0 10011101 11011100 11010110 0101000
S E M(23 )
二、次に20000000+64を観察する
01110111 00110101 10010100 0(1000000)
浮動小数点数に変換
0 10011101 11011100 11010110 0101000
20,000,000,000,000,000の浮動小数点ストレージとそっくり
三、次に20000000+65を観察する
01110111 00110101 10010100 0(1000001)
明らかに
01110111 00110101 10010100 0
01110111 00110101 10010100 0(1000001)
01110111 00110101 10010100 1
明らかに中間の数は下の数に近いので、浮動小数点化後
0 10011101 11011100 11010110 0101001
20,000,000,000,000の浮動小数点ストレージより1
したがって、前の2つのプログラムは0を印刷することで理解できます(ポイントは浮動小数点数に変換する方法と、尾を捨てる方法を知ることです).
四、1の浮動小数点表示
0 01111111 0000000 00000000 00000000
五、浮動小数点数の加減演算
階層:
段差30
従ってf++はfにほとんど影響を及ぼさない
だから死のサイクルになる!!!