2012-06-28 6 views
2

먼저, 내가 물어 보려는 것을 수행하는 여러 가지 더 쉽고/신뢰할 수있는 방법이 있다는 것을 알고 있지만 그것이 내 질문의 요점이 아닙니다.정수를 사용하여 간격을 비교

정수의 두 세트를 분수 인 것처럼 비교하려고합니다. 내가이 의미하는 것은 내가 2 차원 배열이 있다고 가정한다 :

int array[2][2]; 

array[0][0] = 2; 
array[0][1] = 3; 
array[1][0] = 1; 
array[1][1] = 50; 

어떻게이 숫자를 치료하려는입니다 점에서 번호 :

배열 [0] [0] = 2 < --- [0] [1] (3)을 분자 <

배열된다 = --- 분모

또는이 경우에는 단지 2/3이다. 제가하고 싶은 것은 두 분수를 비교하는 것입니다.

if(2/3 < 1/50){ 
    //blah blah blah code here 
} 

여기서주의해야 할 점은 내가 그들의 정확성을 유지하거나 임시 부동 소수점 자리를 만들 부동 소수점 숫자로 숫자를 변환 할 수 있다는 것입니다. 정수 값만을 ​​사용하여 이들을 비교할 수있는 방법이 있습니까?

나는 또한이 질문에 무엇을 태그해야하는지 잘 모르겠다. 내 생각에 뭔가를 생각하면 태그를 달 것이다.

+1

"간격"대신 "합리적인 분수"라고 말하면 제목을 변경해야합니다. 여기에는 간격이 없습니다. –

+0

재미있는 질문과 친절하게 쓰여졌습니다. +1 –

답변

5

크로스

IE 또 다른의 분모 하나 두의 분자를 곱

2/3 1/50 대 : 그런 다음 50

에 의한 곱셈 (50)와 1 세에 의해 2를 곱 3 float로 변환하지 않고도 분자를 비교할 수 있습니다.

+0

예는 정확하지만 첫 번째 문장의 말씨는 정확하지 않습니다. "두 분수를 다른 분모로 교차 곱하기"여야합니다. –

+0

좋은 지적. 네가 제안한 수정안을 만들었 어. – argentage

+0

아주 좋은, 공통 분모를 만드는 것은 심지어 내 마음을 교차하지 않았다, 감사합니다! –

1
if(array[0][0]*array[1][1])<array[0][1]*array[1][0]) 
{ 
    // your code here 

} 
0

가장 간단한 방법은 최소 공배수를 찾아서 분자를 변환하는 것입니다. 그 후에 분자를 정수로 비교할 수 있습니다.

즉 2 * 50 = 100; 1 * 3 = 3; ==> 100> 3

+0

최소 일반 배수는? 아니, 그냥 곱하면 돼. – quasiverse

+0

예를 들어 물어 보면 간단히 곱하면됩니다. 그러나 배열은 2 행 이상일 수 있습니다.보다 일반적인 솔루션을 제공해야합니다. [2,3] [1,50] [1,25] ==> [100,150] [3,150] [6,150], 150은 3, 50, 25에 대한 최소 공배수입니다. –