2009-09-19 8 views
13

는 내가 영으로 나누기 오류를 얻을하지 않습니다왜 충돌하지 않습니까? 내가 여기서 0으로 나눈 적 없니?

CGPoint p1 = CGPointMake(0, 10); 
CGPoint p2 = CGPointMake(0, 10); 

float sxy = slopeXY(p1, p2); 

, 나는 그것을 제로 크기의 라인을 제공하는 경우 두 지점

float slopeXY(CGPoint p1, CGPoint p2) 
{ 
    return ((p2.y - p1.y)/(p2.x - p1.x)); 
} 

에 의해 경계 라인의 기울기를 얻고있다.

+14

0으로 나누는 방법을 찾은 것 같습니다. 이것을 신중하게 사용하십시오. 그렇지 않으면 시공간에 구멍을 찢을 수 있으며 우리의 세계는 무한대로 삼켜 버릴 것입니다. –

답변

28

OS X의 기본 부동 소수점 환경에서는 0으로 부동 소수점 나누기가 트랩이나 예외를 발생시키지 않습니다. 0.0/0.0은 대신 NaN을 반환하고 fpscr에서 잘못된 부동 소수점 상태 플래그를 발생시킵니다. 0이 아닌 값을 0.0으로 나누면 무한대가 반환되고 0으로 나누기 플래그가 발생합니다. 필요하면

당신은

4

나누기 오류 0으로 만 정수 나누기에 대한 발생 math.h에 정의 된 때는 isNaN() 및 isinf() 함수를 사용하여 이러한 조건을 확인할 수 있습니다. float의 경우 보통 배당금이 0이 아닌 한 무한대가됩니다.

1

일반적으로 부동 소수점 오류는 예외를 발생시키지 않습니다.

1

정의되지 않은 동작입니다. 당신의 프로그램은 어떤 식 으로든 행동 할 수 있습니다. 여기에는 우리가 0으로 나누어서 부주의하게 파괴 한 우주의 마지막 엿볼을 충돌 시키거나 보여줄 수 있습니다. 는 C [99]에서 표준

는 §6.5.5.5 :

은/연산자의 결과는 두 번째로 인터넷 RST 피연산자의 분할에서 지수이고; 의 결과는 % 연산자가 나머지 값입니다. 두 작업에서 두 번째 피연산자의 값이 0이면 동작이 정의되지 않습니다.

+4

OS X 컴파일러가 같은 표준의 부속서 F를 따르기 때문에 동작은 * not * undefined입니다. C [99]의 F.3.1 절에서는 "+, -, * 및/연산자는 IEC 60559 가산, 감산, 곱셈 및 나눗셈 연산을 제공하고"IEC60559/IEEE-754는 0으로 나눈 결과를 지정합니다. –

+0

오. 그게 단지 수레를위한거야? – aib

관련 문제