在我的计算中,我有几个输入变量
M_s = 1.989×〖10〗^ 30
G = 6.67384×〖10〗^( - 11)
a = 1.496×〖10〗^ 8
当我写
之类的东西时long double G = 6.67384 * (pow(10,-11));
我收到错误消息:
c:\users\user\documents\visual studio 2010\projects\1.det.earth location in orbit\1.det.earth location in orbit\1.det.earth location in orbit.cpp(15): error C2668: 'pow' : ambiguous call to overloaded function
1> c:\program files (x86)\microsoft visual studio 10.0\vc\include\math.h(583): could be 'long double pow(long double,int)'
1> c:\program files (x86)\microsoft visual studio 10.0\vc\include\math.h(535): or 'float pow(float,int)'
1> c:\program files (x86)\microsoft visual studio 10.0\vc\include\math.h(497): or 'double pow(double,int)'
1> while trying to match the argument list '(int, int)'
我怎样才能表达“G等于6.67384乘以10到-11的幂”并得到正确答案?我应该包括哪些STL库?
答案 0 :(得分:4)
只需更改此行
即可long double G = 6.67384 * (pow(10,-11));
到这个
long double G = 6.67384 * pow(10.0, -11);
问题是,您正在为int
的两个参数传递pow
,编译器需要三个参数中的一个
long double pow(long double, int);
float pow(float, int);
double pow(double, int);
因此对要调用的函数感到困惑。
但是因为在C ++中你可以像这样直接表达10的幂
long double G = 6.67384E-11;
你真的不需要pow
功能。
答案 1 :(得分:3)
Benjamin Bannier在评论中有更好的主意。但那里有一个不允许的空间;清理它看起来像这样:
long double G = 6.67384e-11;
这可能更准确,也可能更快,因为转换为二进制文件是由编译器完成的。当然,一个科学家的价值是熟悉的,我意识到真正的准确性问题是由我们对G的有限测量引起的。你真的不需要long double
,今天float
就足够了在可预见的未来,double
就足够了(我们很快就不会知道G到15位数)
答案 2 :(得分:1)
您需要阅读并理解错误消息:
'pow' : ambiguous call to overloaded function
could be 'long double pow(long double,int)'
or 'float pow(float,int)'
or 'double pow(double,int)'
while trying to match the argument list '(int, int)'
消息说编译器无法猜测你想要的函数的重载,因为第一个参数是int
,它可以用三种不同的方式进行转换。
如果您需要long double
结果,请传递long double
常量或投射它:
10.l
(long double)10