У меня есть следующее заявление.
d = (pow(a,2*l+1)+1)/(val+1);
Здесь,
val
,a
иl
- переменные, не имеющие отношения к вопросу.- числитель может превышать диапазон long long int.
- знаменатель является делителем числителя.
Но окончательный ответ d наверняка будет в диапазоне long long
int. Как посчитать d
без потери точности? Я бы предпочел ответ без преобразования их в массив и использования умножения и деления в начальной школе.
pow
для c и c ++ оба возвращают числа с плавающей запятой std :: pow , в зависимости от типа ввода вы получите доlong double
в качестве вывода, поэтому превышениеlong long
не должно быть проблемой в отношении переполнения, но вы наверняка можете потерять точность , но в зависимости от варианта использования это может быть приемлемо. Если это неприемлемо, вам необходимо использовать такую библиотеку, как GNU GMP. - person t.niese   schedule 12.11.2015[...]My code gives wrong answer for calculation on large numbers[...]
вам нужно объяснить, почему вы получаете или думаете, что получили неправильный результат (например, выполнение==
теста с плавающей запятой никогда не будет работать должным образом). В противном случае единственный ответ - нет никакой возможности обойтись без библиотеки с большими числами. - person t.niese   schedule 12.11.2015