0.1+0.2!=0.3WHY?
1036 ワード
面接ではよく0.1+0.2と聞きます.0.3の原因
小数のバイナリ表現
多くの人が簡単に正の整数の二進法表示を算出できると思いますが、小数はどう表示するか考えたことがありません.JSの数値は64桁で表しています.このうち1桁は符号ビット(正か負か)、52桁は小数を表し、残りの11桁は整数を表しています.整数については、みんなが知っているはずです.2を取って、9という正の整数のように、1つの数のバイナリを求めます.
ここに来たら、あなたがよく知っていると思いますよ.
小数のバイナリ表現
多くの人が簡単に正の整数の二進法表示を算出できると思いますが、小数はどう表示するか考えたことがありません.JSの数値は64桁で表しています.このうち1桁は符号ビット(正か負か)、52桁は小数を表し、残りの11桁は整数を表しています.整数については、みんなが知っているはずです.2を取って、9という正の整数のように、1つの数のバイナリを求めます.
9/2 --> 1
4/2--> 0
2/2 --> 0
1
9 1001
整数の正負は最高位から0を正数とし、最高位は1、負の数とします.小数については、整数と正反対に、整数は2に対して余りを取るが、小数は2に対して積を求める.例えば0.1という小数点以下 1 0, 1 1 , -1 *2 , 1
0.1*2 --> 0
0.2*2 --> 0
0.4*2 --> 0
0.8*2 --> 1 (1.6-1)
0.6*2 --> 1 (1.2-1)
0.2*2 --> 0
0.4*2 --> 0
0.8*2--> 1
........
これにより、0.1は1サイクルの0.0001001100110011001100110011001100101100110010101101と同じ理屈であることが分かりました.私たちは上記の方法に従って0.2のバイナリ表現を求めることができます.0.001100110011001100110011001011001100101010101101は、バイナリの求めと結果によって0.010011001100110011001001100101100110110010110010010011001010101100100100100110110110010101010101100100100100100100100100100100110010101010101010101010101000004!=0.3ですので、現在の式は成立しません.ここに来たら、あなたがよく知っていると思いますよ.