C++ 如何确定浮点数的上下限?
我对以下报价(N3797,3.9.1/8)有疑问: 浮点类型的值表示由实现定义 据我所知,它在定义浮点数边界方面给了实现完全的自由。它们在中有详细说明。比如说,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
#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是不规范的。这就是我不能依赖他们的原因。当然,如果我不理解标准所说的,我总是试图在这些网站上找到它。