Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/127.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在math.h头中是否有返回IEEE_FLOAT64的指数函数?_C++_C_Math - Fatal编程技术网

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";