使用数学中的pow()函数计算整数

时间:2016-03-21 23:39:10

标签: c pow math.h

在c中,我正在尝试在源代码的某处评估表达式,例如;

I = foo * int pow(10, 8) ;

其中foo是一个整数,我想将I分配给:foo * 10 ^ 8

它给了我; error: expected expression before 'int'

我的表情有什么问题?

3 个答案:

答案 0 :(得分:1)

(int)如果你打算施放

答案 1 :(得分:1)

要将值计算为int,请使用:

I = foo * (int)pow(10, 8);

或简单地说:

I = foo * 1E8;

或更好:

I = foo * 100000000;

演员实际上是隐含的,并且使其显式甚至可能触发警告。

请注意,int类型的范围有限,不能代表非常大的数字。您可以使用long longdouble进行具有如此大值的计算。

答案 2 :(得分:0)

@Vincent很好地解答了语法问题

// I = foo * int pow(10, 8) ;
I = foo * (int) pow(10, 8);

使用pow()计算整数幂可能会产生问题。一些弱数学库可能返回一个比预期数学结果小的值。对于(int),该值如果被截断,则为123.999999 - > 123.0。使用舍入函数进行补偿。

I = foo * lround(pow(10, 8));

此外,double 的精确度可能小于int,引入了其他问题。 @chqrlie

考虑使用整数幂函数。很容易制作。

#include <stdint.h>

uintmax_t powjuu(unsigned x, unsigned y) {
  uintmax_t z = 1;
  uintmax_t base = x;
  while (y) {
    if (y & 1) {  // or y % 2
      z *= base;
    }
    y >>= 1;      // or y /= 2;
    base *= base;
  }
  return z;
}

I = foo * powjuu(10, 8);