Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.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/62.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++ 如何确定浮点数的上下限?_C++_C_Floating Point - Fatal编程技术网

C++ 如何确定浮点数的上下限?

C++ 如何确定浮点数的上下限?,c++,c,floating-point,C++,C,Floating Point,我对以下报价(N3797,3.9.1/8)有疑问: 浮点类型的值表示由实现定义 据我所知,它在定义浮点数边界方面给了实现完全的自由。它们在中有详细说明。比如说, #include <iostream> #include <limits> int main() { std::cout << "double_max = " << std::numeric_limits<double>().max() << std::e

我对以下报价(N3797,3.9.1/8)有疑问:

浮点类型的值表示由实现定义

据我所知,它在定义浮点数边界方面给了实现完全的自由。它们在中有详细说明。比如说,

#include <iostream>
#include <limits>

int main()
{
    std::cout << "double_max = " << std::numeric_limits<double>().max() << std::endl;
    std::cout << "double_min = " << std::numeric_limits<double>().min() << std::endl;
    std::cout << "float_max = " << std::numeric_limits<float>().max() << std::endl;
    std::cout << "float_min = " << std::numeric_limits<float>().min() << std::endl;
}
#包括
#包括
int main()
{

std::cout上下限取决于编译器对浮点数的实现。因此,它不仅仅是用户定义的限制,而是取决于编译器为存储浮点数而设计的内存布局的数学约束


如果需要用户定义的限制
,可以使用自定义整数类,该类重载数值操作的运算符,并在任何操作之前应用用户定义的限制。

内置类型的限制主要受硬件限制。x64 CPU通常将浮点数据表示为d在FPA标准(硬件协处理器)中定义

无论如何,事情的内部表示和处理方式可能会有所不同,正如您所指出的

浮点类型的值表示由实现定义

编译器通常具有底层目标系统的知识(特别是指进行代码生成的后端),因此在使用fp算术提示时可以选择正确的指令集

您始终可以定义一个自定义数据类型,由您自己管理物理资源。您所指的术语可能是(通常要慢得多,如果您的数据符合硬件提供的条件,您应该使用它)

在特定情况下(例如,一些没有FPU或无法执行浮点操作的嵌入式单元),可能会使用仿真。这更便宜(晶体管更少),尽管速度较慢。

在普通C中,您可以
#包括
,它提供常数,例如:

DBL_MAX
DBL_MIN

FLT_MAX
FLT_MIN
以及尾数的位数,指数范围等

我总是困惑于C++引用站点中的哪一个是“你可以在这里发布,而不是你应该去的地方,因为你得到了评论”,但是这里有一个在谷歌里找到的: 由于这是一个相当标准的文件,我希望没有太大的区别。当然,这指的是“C++-ified版本”,但为C定义的宏是相同的


<>(注意,C++ <代码>限制通常是从在代码>浮标中找到的相同常数实现的。H.//C>在某种意义上,直接或间接地)

你看了C标准吗?(它比C++的短很多)。“OliverCharlesworth是的,我有。C标准定义了FLTYMAX,FLTYMIN等等,相应地,1+37,1E-37相应地,同时C++标准不。编译器通常是实现浮点吗?在我的经验中,这通常是由编译器的硬件来完成的吗?@ MatsPetersson:什么时候?FP硬件不存在吗?我认为编译器“可以”实现,但是大多数编译器选择外包目标机器。例如,gcc表示目标机器格式的浮点数。但是它在交叉编译时可能会模拟。@OliverCharlesworth:嗯,它通常仍然不是由编译器实现的……这样的硬件还存在吗?)@Matstpeterson:在嵌入式世界中仍然比较常见。你自己知道cpluscplus.com和cppreference.com是不规范的。这就是我不能依赖他们的原因。当然,如果我不理解标准所说的,我总是试图在这些网站上找到它。