Как избежать целочисленного переполнения в случае функции pow при делении на число?

У меня есть следующее утверждение.

d = (pow(a,2*l+1)+1)/(val+1);

Вот,

  • val, a а также l переменные, которые не имеют отношения к вопросу.
  • числитель может превышать long long int range.
  • Знаменатель является делителем числителя.

Но окончательный ответ d наверняка будет под long long int range. Как рассчитать d без потери точности? Я бы предпочел ответ без преобразования их в массив и использования умножения и деления в начальной школе.

0

Решение

У меня нет времени, чтобы написать правильный ответ сейчас; Я расширю это позже, если у меня будет шанс. Основная идея состоит в том, чтобы использовать алгоритм начальной школы, работая с «цифрами», которые являются степенью знаменателя. Сделайте поиск в Google для «умножения Schrage» или посмотрите Вот для справок.

0

Другие решения

Я надеюсь, что операнды тоже целочисленные

  1. Я бы использовал силу, возводя в квадрат вместо пау

    Увидеть Целочисленная сила путем возведения в квадрат

  2. во время итерации # 1

    Каждый раз, когда промежуточный результат и знаменатель на стенде делятся на 2, делят их обоих, чтобы сохранить небольшой результат и не потерять точность или правильность результата. Таким образом, каждый раз, когда бит младшего бита как для результата, так и для знаменателя, сдвигается на ноль вправо на 1 бит.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector