C++ 为什么;是“U模”;双精度浮点数是否为false?

C++ 为什么;是“U模”;双精度浮点数是否为false?,c++,C++,我编写了一些代码来检查类型是否具有模表示: #include <iostream> #include <limits> using namespace std; int main( ) { cout << "Whether float objects have a modulo representation: " << numeric_limits<float>::is_modulo << en

我编写了一些代码来检查类型是否具有模表示:

#include <iostream>
#include <limits>

using namespace std;

int main( )
{
    cout << "Whether float objects have a modulo representation: "
         << numeric_limits<float>::is_modulo << endl;
    cout << "Whether double objects have a modulo representation: "
         << numeric_limits<double>::is_modulo << endl;
}
但是我们可以使用
fmod()
(来自
)来找到
浮点数的模。那么,如果有可能找到浮点或双精度的模,为什么
是_modulofalse?

如下所述:

std::numeric_limits::is_modulo
的值适用于所有 使用模运算处理溢出的算术类型T 是,如果加法、减法、乘法或 此类型的除法将超出范围
[min(),max()]
,即 此操作返回的值与预期值的差异为
max()-min()+1的倍数

因此,它并没有说“寻找模”,而是说
a+b
将如何运行。浮点算术不会像整数算术那样溢出。

对于使用模运算处理溢出的所有算术类型T,即,如果此类型的加法、减法、乘法或除法的结果超出范围[
min()
max()
],则
std::numeric\u limits::is_modulo
的值为
true
,此操作返回的值与预期值相差
max()-min()+1的倍数


浮点数溢出,因此
std::numeric_limits::is_modulo
表示
float
double
表示
为false
这与
fmod
无关。对浮点值的任意操作是无关的

一个人是否有“模表示”就像
无符号int
s自动环绕一样

无论是
float
s还是
double
s都不会这样做,因此
是模
false

Whether float objects have a modulo representation: 0
Whether double objects have a modulo representation: 0