2012-05-30 3 views
0

Когда я хочу работать с большими и маленькими цифрами, как мне суммировать/сравнивать значения в C?Как обрабатывать вычисления с большими номерами цифр?

#include <stdio.h> 
#include <math.h> 

int main(void) { 
    if (1.0 + (1/pow (10,50)) == 1.0) 
     printf("true"); 
    else 
     printf("false"); 
    return 0; 
} 

как это сделать, чтобы вернуть false?

+1

Если ваш 10^50 предназначен для «10 к мощности 50», это неверно,^побитовое ИЛИ. – RoneRackal

+0

@ RaulP.R.O Этот вопрос указывает на концепцию большого поплавка больше, чем большой int. Десятичные числа с произвольной точностью гораздо более подходят для этого вопроса, чем целые числа произвольной длины. –

+0

@ RaulP.R.O спасибо, исправлено – Cynede

ответ

1

В C99 самая высокая точность, которую вы можете получить, это long double, который является либо 64-битным, либо 128-битным числом с плавающей запятой IEEE на большинстве современных компиляторов/архитектур C. Если вам нужна более высокая точность, рассмотрите возможность использования некоторых библиотек, которые, например, используются GCC:

GMP (http://gmplib.org/) - произвольная арифметика точности для целых чисел и поплавков; MPFR (http://www.mpfr.org/) - библиотека с плавающей запятой с множественной точностью (заявлено, что она правильно округлена) MPC (http://www.multiprecision.org/index.php?prog=mpc) прецизионная комплексная библиотека чисел.

3

Вы не можете заставить его возвращать false со стандартными типами C. Вам нужно будет использовать высокоточную библиотеку с плавающей запятой.