所以我想做pow(x,y).其中x和y是无符号长整数,结果存储在无符号长整数中.这个结果将小于2 ^ 63所以我应该能够做到这一点.但由于它返回一个浮点数,我得到大数字的不准确结果.无论如何都可以在不使用像bignum这样的外部库的情况下获得精确的结果?我知道我可以简单地做x*xa Y次,但这是我想避免的,因为我试图让我的程序更快.
pow函数返回一个具有精度问题的double,当你将它转换为long时,你肯定会得到精度问题.据我所知,如果你不使用库,那么单独使用pow功能就无法获得准确的结果.
您还可以通过平方来查看指数,还可以查看barak manos的答案,您可以尝试将自己的pow功能实现为
Run Code Online (Sandbox Code Playgroud)unsigned long long pow(unsigned long long x,unsigned int y) { unsigned long long res = 1; while (y > 0) { if (y & 1) res *= x; y >>= 1; x *= x; } return res; }