gpt4 book ai didi

C++ cmath pow 错误存在于旧版本的编译器中,但不存在于新版本中

转载 作者:太空狗 更新时间:2023-10-29 20:45:58 24 4
gpt4 key购买 nike

使用 4.2.1 g++ 编译器时出现以下错误:

functions.cpp:24: error: call of overloaded ‘pow(long int&, long int&)’ is ambiguous
/usr/include/architecture/i386/math.h:343: note: candidates are: double pow(double, double)
/usr/include/c++/4.2.1/cmath:373: note: long double std::pow(long double, int)
/usr/include/c++/4.2.1/cmath:369: note: float std::pow(float, int)
/usr/include/c++/4.2.1/cmath:365: note: double std::pow(double, int)
/usr/include/c++/4.2.1/cmath:361: note: long double std::pow(long double, long double)
/usr/include/c++/4.2.1/cmath:357: note: float std::pow(float, float)

这是负责的代码:

long power(long a, long b) {
if (b < 0) return 0;
return pow(a,b);
}

但是,在我的 4.6.1 版本中,我的代码没有错误或警告,我使用两个 long 进行 pow 评估(即使使用 -Wextra 标志)。为什么是这样?对 pow 函数使用两个 long 是我的错误吗?

最佳答案

据我所知,pow 未被 ANSI 确认支持 long, long 作为参数。请考虑使用 double(或转换为),如果需要,将结果四舍五入如下:

long int result = llround(pow((double)2L, (double)4L));

关于C++ cmath pow 错误存在于旧版本的编译器中,但不存在于新版本中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9274033/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com