我在C中使用pow()
函数时遇到一些问题。当运行此代码时,153
作为输入,总和计算为152
。但是,如果我不使用pow()
函数而是使用for
循环来获取 N n 的值,则总和计算为{{1 }}。任何人都可以帮忙解释一下这个区别吗?
153
答案 0 :(得分:0)
您的C实现(包括其数学库)执行错误的pow
会返回不准确的结果。 (当数学结果在浮点格式中完全可表示时,良好的pow
实现会返回精确的结果。)例如,对于pow(7, 2)
,您的pow
可能会稍微返回一个值当它转换为unsigned int
时(除sum
之外),它会被截断,结果为48。
要解决库中的此缺陷,请不要将pow
用于整数运算。编写自己的整数运算来获得所需的结果。在某些情况下,使用round(pow(N, n))
可能就足够了,但是需要考虑这个值的工作范围(宽整数可能表示double
不能表示的整数),有时还有表现。 (另一种解决方法是获得更好的C实现。)