2015-01-30 3 views
0

과제를 위해 쓰고있는 프로그램의 일부로 두 숫자를 비교해야합니다. 본질적으로이 프로그램은 두 축이 주어진 타원의 이심률을 계산하고 계산 된 편심 값을 지구의 달의 궤도와 태양 주위의 지구 궤도의 (기 설정된) 이심률과 비교해야합니다. 계산 된 편심 값이 주어진 편심 값보다 큰 경우이 값은 1 값으로 나타내야하며, 그렇지 않으면 0 값으로 표시되어야합니다. 이러한 모든 값은 부동 소수점, 특히 long double입니다.비교 연산자가없는 두 숫자 비교

할당의 제약 조건으로 인해 비교 연산자 (>과 같은) 나 모든 종류의 논리 (!x 또는 if-else)를 사용할 수 없습니다. 그러나 math.h 라이브러리의 powsqrt 함수를 사용할 수 있습니다. 또한 모듈러스 연산뿐만 아니라 산술 연산도 사용할 수 있습니다.

내가 분모가 분자보다 큰 경우 나 소수점을 절단하는 정수 나눗셈을 활용할 수 있다는 사실을 알고

, : MOON_ORBIT_ECCENTRICITY이 큰 0 경우

int x = eccentricity/MOON_ORBIT_ECCENTRICITY;는 것입니다 ... eccentricity보다. 그러나이 관계가 반전되면 x의 값은 0이 아닌 정수가 될 수 있습니다. 이 경우 원하는 결과는 1입니다.

첫 번째 가장 직관적 인 (그리고 순진) 솔루션

했다 :

int y = (x/x);

이 제로가 아닌 1x 경우 반환합니다. 그러나 x0이면 0으로 나눈 값으로 인해 프로그램이 중단됩니다. 사실, 나는 0으로 나누는 문제에 부딪치고있다. 누구든지이 문제를 해결하는 방법에 대한 아이디어가 있습니까

int y = (x + 1) % x;

: 이것은 또한의 경우에는 어떻게됩니까? 이 처럼 그렇게 좌절감이 있습니다.

+0

천장 및 바닥 기능을 확인 했습니까? –

+1

'if '와 같은 제어문을 사용할 수 없다면 어떻게 비교 결과를 사용할 것인가? – harper

+0

비트 연산을 사용할 수 있습니까? –

답변

0

@lurker 위의 의견은 eccentricity을 OP가 제한하여 처리하는 좋은 접근 방법입니다.
그래서 같이 심각하지 않은 다음 사항을 고려 것을 복사 할 수 없습니다 :


// Return e1 > e2 
int Eccentricity_Compare(long double e1, long double e2) { 
    char buf[20]; 
    // print a number beginning with 
    // if e2 >= e1: `+` 
    // else `-` 
    sprintf(buf, "%+Le", e2 - e1); // reverse subtraction for = case 
    const char *pm = "+-"; 
    char *p = strchr(pm, buf[0]); 
    return (int) (p - pm); 
} 

윙크, 윙크 : 영업 이익은 아무것도에 대한 <stdio.h> 기능 말했다.