У меня есть следующее утверждение.
d = (pow(a,2*l+1)+1)/(val+1);
Вот,
val
, a
а также l
переменные, которые не имеют отношения к вопросу. Но окончательный ответ d наверняка будет под long long
int range. Как рассчитать d
без потери точности? Я бы предпочел ответ без преобразования их в массив и использования умножения и деления в начальной школе.
У меня нет времени, чтобы написать правильный ответ сейчас; Я расширю это позже, если у меня будет шанс. Основная идея состоит в том, чтобы использовать алгоритм начальной школы, работая с «цифрами», которые являются степенью знаменателя. Сделайте поиск в Google для «умножения Schrage» или посмотрите Вот для справок.
Я надеюсь, что операнды тоже целочисленные
Я бы использовал силу, возводя в квадрат вместо пау
во время итерации # 1
Каждый раз, когда промежуточный результат и знаменатель на стенде делятся на 2, делят их обоих, чтобы сохранить небольшой результат и не потерять точность или правильность результата. Таким образом, каждый раз, когда бит младшего бита как для результата, так и для знаменателя, сдвигается на ноль вправо на 1 бит.