에 오신 것을 환영합니다. 표준 부동 소수점 표기법으로 표현할 수없는 숫자가 많이 있으며 비트를 약간 벗어났습니다. 다음과 같이
이 쉽게 설명되어 :
(1..10).collect do |i|
v = ((10**i).to_f + 0.7)
puts "%13.1f = %.30f" % [ v, v.modulo(1) ]
end
결과가 여기서
10.7 = 0.699999999999999289457264239900
100.7 = 0.700000000000002842170943040401
1000.7 = 0.700000000000045474735088646412
10000.7 = 0.700000000000727595761418342590
100000.7 = 0.699999999997089616954326629639
1000000.7 = 0.699999999953433871269226074219
10000000.7 = 0.699999999254941940307617187500
100000000.7 = 0.700000002980232238769531250000
1000000000.7 = 0.700000047683715820312500000000
10000000000.7 = 0.700000762939453125000000000000
공지 소수점 자리 이상으로 정밀도 낮은 숫자 가져 더 큰 것을. 이는 전체 수를 나타낼 수있는 고정 된 양의 정밀도가 있기 때문입니다.
거의 모든 [부동 소수점] 질문이 중복됩니다. 예를 들어 http://stackoverflow.com/questions/1089018/why-cant-decimal-numbers-be-represented-exactly-in-binary를 참조하십시오. –
이것은 루비 토크 메일 링리스트에있는 약 100 개의 스레드 또는 실제로 존재해온 프로그래밍 언어의 토론 포럼과도 중복됩니다. –