2017-02-10 78 views
1

我正在使用定點代碼(即只有16和32位整數)。 現在我需要比較兩個非常相似的整數的商,例如比較兩個整數的商

int result = 705/239; 
int result2 = 720/235; 

我怎麼能告訴哪些結果會更大,只用整數?在這裏使用花車當然更容易,但不可能。

謝謝。

回答

0

交換除數和繁殖如以下compare功能:

#include <stdio.h> 

// -ve if dividend1 ÷ divisor1 is less than dividend2 ÷ divisor2 
// zero if dividend1 ÷ divisor1 is equal to dividend2 ÷ divisor2 
// +ve if dividend1 ÷ divisor1 is greater than dividend2 ÷ divisor2 
int compare(int dividend1, int divisor1, int dividend2, int divisor2) { 
    int product1 = dividend1 * divisor2; 
    int product2 = dividend2 * divisor1; 
    return product1-product2; 
} 

void test(int dividend1, int divisor1, int dividend2, int divisor2) { 
    int comparison = compare(dividend1, divisor1, dividend2, divisor2); 
    char const* relation = (comparison < 0) ? "less than" : (comparison > 0) ? "greater than" : "equal to"; 
    printf("%d/%d is %s %d/%d.\n", dividend1, divisor1, relation, dividend2, divisor2); 
} 

int main() { 
    test(705, 239, 720, 235); 
} 

注:

  1. 既不商數較大如果該比例等於。
  2. 這與比較dividend1/divisor1divident2/divisor2是不同的,因爲整數分割會截斷商。例如,當除數大於分紅時,商總是零。
  3. 如果compare中的任何操作溢出,結果是不確定的。
0

使用基本數學:

int d1=705; 
int d2=720; 
int s1=239; 
int s2=235; 

int result1=d1/s1; 
int result2=d2/s2; 

if (d1*s2>d2*s1) 
    result1 is bigger 
else 
    result2 is bigger