使用 std::pow 进行整数数学运算时,您可能会遇到意外的输出。在这种情况下,打算设置 i = 23 1 * 10^2 的代码片段会得到 122,而不是 123。
这种行为源于 std::pow 的浮点性质,它本质上缺乏无限精确。低效的实现可能会加剧这个问题。
为了解决这个问题,可以定义一个自定义整数幂函数。在 C 11 及更高版本中,constexpr 函数确保可以在编译时计算结果:
constexpr int int_pow(int b, int e) { return (e == 0) ? 1 : b * int_pow(b, e - 1); }
另一种尾递归形式,归因于 Dan Nissenbaum,允许更高效的计算:
constexpr int int_pow(int b, int e, int res = 1) { return (e == 0) ? res : int_pow(b, e - 1, b * res); }
这些替代方案提供精确的整数幂计算,解决了 std::pow 遇到的问题。
以上是为什么'std::pow”使用整数数学会给出意外的结果?的详细内容。更多信息请关注PHP中文网其他相关文章!