viewimage.php?id=20bcc42ee0df39b267bcc5&no=24b0d769e1d32ca73cef83fa11d02831a8a78790708c2166b82f7ce95d9030b68484e052f8892652880ac8e4324b4c625a804e79ebc5bd50dd9c820ae1e63e4974f8

다음과 같은 다항식을 생각하자.

이때 a=77617.0, b=33096.0일때 f(a,b)를 구해보자

이걸 IBM 370이라는 틀딱컴에서 돌리면, single precision에서는 1.172603, double 에서는 1.1726039400531, 

extended에서는 1.172603940053178이라는 값이 나온다고한다.


근데 정답은 -0.827396059946821부호조차 다른 값이라고 한다.

얘의 더 웃긴점은 뭐냐면, 운영체제와 cpu에 따라서 변한다는 것이다.

구글에서 찾다 발견한건데 Handbook of Floating-Point Arithmetic(Jean-Michel Muller, et al)에 의하면

펜티엄 4, 리눅스, GCC 컴파일러 C로 돌리면 single은 2.0317 e+29, double은 5.960604 e+20, extended에서는 -9.38724 e-323이 나온다고 한다.

내 컴에서 돌릴때도(C++, g++) single은 -3.53675933115810770 e+029, double은 -1.18059162071741130 e+21, extended는 3.17286586244148490 e-317이 나온다.

그러니까 유리수를 쓸 수 있다면 유리수를 쓰자