2016-02-21 3 views
-1

, если диапазон d равен 1 < = d < = 10^101 и n равен 1 < = n < = 200. поскольку диапазон двойных равен 2,3E-308 до 1.7E + 308. когда я принимаю вход 11111111111111111111 как d, тогда значение d становится 11111111111111111000.000, когда я показываю значение терминалу. это означает, что он не может правильно ввести вход, то как он даст правильное значение для 10^101. Мне нужно знать n-й корень из d. d всегда будет иметь вид p = k^n. поэтому я добавил функцию pow, чтобы узнать n-й корень. но проблема в том, что диапазон p огромен. я пытаюсь решить эту проблему Power of Cryptography!как этот код будет работать для большего номера диапазона?

int main(){ 

double d,n; 

scanf("%lf%lf", &n, &d)) 
{ 
    printf("%lf\n", pow(d, 1/n)); 
} 

    return 0; 
} 
+2

Добро пожаловать в мир чисел с плавающей запятой. Вы должны взглянуть на концепцию точности. Для произвольной точности FP см. [MPFR] (http://www.mpfr.org/). –

+0

@MargaretBloom - вы поняли вопрос? Может быть, это просто я :( –

+0

@MartinJames ahahah, я только что сделал и получил обоснованное предположение. –

ответ

4

double точность числа не способен удерживать все значения между 2.3E-308 до 1.7E + 308, он способен удерживать значение между этими числами с точностью около 15 знаков после запятой.

Это означает, что некоторые номера (например, ваш пример) требуют большей точности, чем 8 байтов данных могут сохраняться.

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