琐碎的问题:我只是想知道,如果一个人想要提高一个int或一个long来强制另一个int或long,
(long)std::pow((double)a,(double)b)
Run Code Online (Sandbox Code Playgroud)
足够,或者我需要
(long)(0.5 + std::pow((double)a,(double)b))
Run Code Online (Sandbox Code Playgroud)
?
有两个注意事项.由于浮点表示的不精确性,第一个是舍入; 在这种情况下,这不会成为问题,因为只要位数小于浮点中有效位的位数,整数就可以完美表示.如果long是32位并且double有效数是53位,则通常不会出现问题.
第二个考虑因素是pow函数本身的准确性.如果它有可能低于实际值,则添加0.5以舍入结果是确保正确结果的唯一方法.
您的预期结果pow将始终为整数,因此添加0.5无害.我推荐那个版本.