2011-10-11 6 views
4

0으로 나누면 분할 된 부분에 따라 ZeroDivisionError, Infinity 또는 NaN 중 하나가 표시됩니다. 3.0/0 인 반면Ruby에서 0.0/0, 3.0/0 및 3/0이 다르게 동작하는 이유는 무엇입니까?

ruby-1.9.2-p180 :018 > 0.0/0 
=> NaN 

ruby-1.9.2-p180 :020 > 3.0/0 
=> Infinity 

ruby-1.9.2-p180 :021 > 3/0 
ZeroDivisionError: divided by 0 

나는, 0.0/0 (수학 용어) 인피니티 아니라는 것을 이해하지만 왜 다음 인피니티는하지 3/0? 왜 정수를 나눌 때 예외가 발생하지만 부동 소수점을 나누지 않는 이유는 무엇입니까?

답변

9

루비에서는 모든 숫자가 똑같이 (말장난 의도) 생성되는 것은 아닙니다.

십진수 (0.0, 3.0) 부동 소수점 연산을 위해 IEEE 754-2008 standard를 따르

표준은 산술 포맷 정의 한정된 숫자의 구성 이진 세트 및 부동 소수점 데이터 (서명 포함 0과 비정규 숫자), 무한대, 특수 "숫자가 아닌"값 (NaN이)

정수 (0, 3)는 정수로 처리됩니다.

NaNInfinity (및 -Infinity)은 이러한 부동 소수점이 처리하도록 설계된 특수한 경우이지만 정수는 오류가 아니기 때문에 오류가 발생합니다.

관련 문제