G++ log10(浮点) log10(双)
G++ log10(float) log10(double)
我启用了 -Wdouble-promotion
并且下面的代码在没有警告的情况下编译。在此更改之前,我试图简单地使用 log10()
,假设编译器会调用 log10(float)
。在这些情况下,它抱怨 10.0f
被提升为 double 大概是因为 log10(double)
被调用了。有什么想法吗?我不想使用内置的。
我在 Ubuntu 14.04.
上使用 C++14
$ arm-xilinx-eabi-g++ --version
arm-xilinx-eabi-g++ (Sourcery CodeBench Lite 2014.11-31) 4.9.1
#include <math.h>
F32 Power::dbm(F32 watts)
{
return 10.0f * __builtin_log10f(watts * 1000.0f);
}
Building file: ../Source/Power.cpp
Invoking: ARM g++ compiler
arm-xilinx-eabi-g++ -Wall -O0 -g3 -c -fmessage-length=0 -MT"Source/Power.o" -std=c++14 -mfloat-abi=softfp -mfpu=neon -Wdouble-promotion -MMD -MP -MF"Source/Power.d" -MT"Source/Power.d" -o "Source/Power.o" "../Source/Power.cpp"
Finished building: ../Source/Power.cpp
您对浮点数使用了错误的函数。使用 log10f()
.
定义如下:
double log10(double x);
float log10f(float x);
long double log10l(long double x);
来源:
man 3 log10
您包括了一个 C header、math.h
,它不为 log10
使用 float
提供重载。如果你想要 log10
的重载版本包括 cmath
并使用 std::log10
:
std::log10(watts * 1000.0f)
或者,按照 Ongun 的建议,使用 log10f
:
log10f(watts * 1000.0f)
我启用了 -Wdouble-promotion
并且下面的代码在没有警告的情况下编译。在此更改之前,我试图简单地使用 log10()
,假设编译器会调用 log10(float)
。在这些情况下,它抱怨 10.0f
被提升为 double 大概是因为 log10(double)
被调用了。有什么想法吗?我不想使用内置的。
我在 Ubuntu 14.04.
上使用 C++14$ arm-xilinx-eabi-g++ --version
arm-xilinx-eabi-g++ (Sourcery CodeBench Lite 2014.11-31) 4.9.1
#include <math.h>
F32 Power::dbm(F32 watts)
{
return 10.0f * __builtin_log10f(watts * 1000.0f);
}
Building file: ../Source/Power.cpp
Invoking: ARM g++ compiler
arm-xilinx-eabi-g++ -Wall -O0 -g3 -c -fmessage-length=0 -MT"Source/Power.o" -std=c++14 -mfloat-abi=softfp -mfpu=neon -Wdouble-promotion -MMD -MP -MF"Source/Power.d" -MT"Source/Power.d" -o "Source/Power.o" "../Source/Power.cpp"
Finished building: ../Source/Power.cpp
您对浮点数使用了错误的函数。使用 log10f()
.
定义如下:
double log10(double x);
float log10f(float x);
long double log10l(long double x);
来源:
man 3 log10
您包括了一个 C header、math.h
,它不为 log10
使用 float
提供重载。如果你想要 log10
的重载版本包括 cmath
并使用 std::log10
:
std::log10(watts * 1000.0f)
或者,按照 Ongun 的建议,使用 log10f
:
log10f(watts * 1000.0f)