2017-02-10 17 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/divisor1 и divident2/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 

 Смежные вопросы

  • Нет связанных вопросов^_^