C++ 在math.h头中是否有返回IEEE_FLOAT64的指数函数?
我想使用指数函数,它返回C++ 在math.h头中是否有返回IEEE_FLOAT64的指数函数?,c++,c,math,C++,C,Math,我想使用指数函数,它返回IEEE\u FLOAT64值 目前我正在使用expf函数,但仍然收到很多警告 value = IEEEPosOne - (IEEE_FLOAT64)expf(value1); 从man 3 exp: NAME exp, expf, expl - base-e exponential function SYNOPSIS #include <math.h> double exp(double x);
IEEE\u FLOAT64
值
目前我正在使用expf
函数,但仍然收到很多警告
value = IEEEPosOne - (IEEE_FLOAT64)expf(value1);
从
man 3 exp
:
NAME
exp, expf, expl - base-e exponential function
SYNOPSIS
#include <math.h>
double exp(double x);
float expf(float x);
long double expl(long double x);
Link with -lm.
名称
exp,expf,expl-base-e指数函数
提要
#包括
双exp(双x);
float expf(float x);
长双EXP(长双x);
链接到-lm。
所以只需使用exp()
/c++
#包括
双x=7.0//浮动64
自动y=std::exp(x)//exp(64);
C++标准提供了适当的重载。不需要在函数名中反映操作数类型。这不适用于C++
有关C,请参见@iBug的答案
C++标准不需要实现使用IEEE标准。虽然这通常是最容易使用的浮点实现,因为芯片在现代机器中是相对标准的
该标准提供了一种使用std::numeric\u limits
进行检查的方法
因此,如果这是一个需求,那么您应该进行验证
#include <limits>
#include <iostream>
int main()
{
static_assert(sizeof(double) == 64);
static_assert(std::numeric_limits<double>::is_iec559());
// If the above compiles your double is IEEE 64 bit value.
// Or IEEE_754 compliant https://en.wikipedia.org/wiki/IEEE_754_revision
}
以上都在标准名称空间中
std::cout << std::exp(100000.1) << "\n";
std::cout 64位浮点数在C/C++中正好是double
。double使用exp()
,float使用expf()
,long double使用expl()
。@iBug:不正确。您的实现可能是,但这不是标准所要求的。@iBug:double
不要求是64位IEEE浮点数。(exp
需要返回一个double
,但如果double
有不同的表示形式,则这将无济于事。)CAAnusha:您会收到精度损失警告,因为您向一个参数为float
(即expf
)的函数提供了一个double
;将double
转换为float
会失去精度。最后一句话不是真的。在C11中,您可以#include
,然后几乎所有没有长度指示的数学函数(如exp
)都将被宏覆盖,宏会自动选择相应的特定函数。我不知道这一点。它是如何推断类型的?预处理器通常应该与类型系统无关。让我大吃一惊的是,预处理器确实不知道类型系统;宏将插入通用选择表达式。请参阅第6.5.1.1节(例如,刚刚找到关键字)。
* float exp( float arg );
* double exp( double arg );
* long double exp( long double arg );
* double exp( Integral arg );
std::cout << std::exp(100000.1) << "\n";