Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何将此Python转换为C++;没有溢出?_C++_Python_Overflow - Fatal编程技术网

C++ 如何将此Python转换为C++;没有溢出?

C++ 如何将此Python转换为C++;没有溢出?,c++,python,overflow,C++,Python,Overflow,我有以下Python代码片段 v=(2*(a/2)+1)**2 U=int(((4*N+v)**.5-1)/4) N的数量级为10^12,变量“a”具有许多值,但其最大值也为10^12量级 但是我似乎不能在C++中写这个东西而不溢出某处,我有点被卡住了。p> 编辑:是的,2*(a/2)是故意的,因为在Python中,除法与楼层除法相同。有时a是奇怪的,所以我需要将它减半,将其固定,然后再乘以2,这就是代码所做的 >>> a=10**12 >>> v=(2*(

我有以下Python代码片段

v=(2*(a/2)+1)**2
U=int(((4*N+v)**.5-1)/4)
N的数量级为10^12,变量“a”具有许多值,但其最大值也为10^12量级

<>但是我似乎不能在C++中写这个东西而不溢出某处,我有点被卡住了。p> 编辑:是的,2*(a/2)是故意的,因为在Python中,除法与楼层除法相同。有时a是奇怪的,所以我需要将它减半,将其固定,然后再乘以2,这就是代码所做的

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

您正在计算的值需要80位,而long只需要64位。你需要一个扩展的算术包来处理它。< /p> @ DavidSchwartz,这是我的代码——这正是我试图翻译成C++的。除非你是指我的C++代码,在这种情况下,我只是试着用了长的龙,它不能容纳所有的东西。你要浮吗?或者?我很久以前就试着安装GMP了,但我发现在Windows上工作是出了名的困难,即使这样,使用它也非常麻烦。我所追求的结果值是整数(在数学意义上)而不是十进制/浮点。U=int()部分只是切断了任何十进制数据块,因为我的程序不需要它707106@KaliMa:不管你喜欢与否,如果你想要一个精确的答案,你将需要一个大的整数库,或者你可以使用
double
和松散精度。
v
的值在10^24的范围内,这比普通平台上的任何整数都要高。GMP是一个非常痛苦的工作。在85%的时间里,任何东西都不能工作。不过谢谢。这其实很简单。你怎么知道你在Python版本中没有失去精度呢
(4*N+v)**.5
返回一个浮点值,即使
N
=1和
v
=0。@mkb结果的整数值不会太不精确。我的N值需要大得多才能发生同样,我如何设置GMP变量从两个变量相乘?我正在尝试mpz_mul(v,ha,ha);式中,ha是(2*(a/2)+1)^2作为long-long的结果,v是一个mpz_类