Как конвертировать этот Python в C ++ без переполнения?

У меня есть следующий фрагмент Python

v=(2*(a/2)+1)**2
U=int(((4*N+v)**.5-1)/4)

N имеет порядок 10 ^ 12, а переменная «a» принимает много значений, но также имеет величину 10 ^ 12 в своем максимальном значении.

Однако я не могу написать это на C ++, не переполнив что-то где-то, и я немного застрял.

edit: И да, 2 * (a / 2) является преднамеренным, потому что в Python деление такое же, как и деление по полу. Иногда a является нечетным, поэтому мне нужно его наполовину сократить, нарезать, затем умножить на 2, что и делает этот код.

2

Решение

>>> a=10**12
>>> v=(2*(a/2)+1)**2
>>> log(v,2)
79.72627427729958

Значение, которое вы рассчитываете, требует 80 битов, а long long — только 64. Для обработки вам понадобится расширенный арифметический пакет.

3

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

Других решений пока нет …

По вопросам рекламы [email protected]