为什么浮点数不被视为整数类型?

6
我正在关注type_traits,无意中发现float不被视为整型。这让我感到惊讶。
我查阅了网络以寻找相关信息,但未能找到任何与此有关的信息。我只能找到像这样的内容
如果T是整数类型(bool、char、char16_t、char32_t、wchar_t、short、int、long、long long,包括任何签名、无符号和cv限定符变体),则提供成员常量值等于true。对于任何其他类型,值为false。
因此问题在于:为什么C++标准委员会决定float不是整型?

3
没有关闭这个问题的理由。它是对“integral”的误解,它可以意味着“中心的”或“组成的”,未来可能会有其他人首先想到这种另外的含义。 - jogojapan
4个回答

12
一个整数类型指的是只包含整数 - 整数的数据类型。浮点数类型的目的是表示非整数。
维基百科关于计算机科学中的整数页面上可以看到:
在计算机科学中,整数是一种积分数据类型的数据,这种数据类型代表了一些有限的数学整数子集。

4
Jon Skeet总是解决方案。 - ta.speot.is
1
@nhahtdh:但它不是数学整数的有限子集。如果将float视为整数类型,那就意味着0.5被认为是整数。 - Jon Skeet

5
我怀疑你感到困惑的是应该使用哪个意思来解释“integral”的含义:
INTEGRAL的定义如下: 1a.协成整体不可或缺的部分 "课程的一个重要组成部分"
1b(1)包含一个或多个整数,关于整数的(2)与数学积分或积分结果相关的
这里并不是指(1a)整体不可或缺的部分(float就符合这一点),而是指(1b)与整数有关。

4

Jon的回答是正确的,但这里是一些可能会帮助你的类型特征的简短概述:

  • is_integral检查一个类型是否为整数类型
  • is_floating_point检查一个类型是否为浮点数类型
  • is_arithmetic检查一个类型是否为整数或浮点数类型

这里有一个漂亮的图表,来自Howard Hinnant,展示了各种类型之间的关系。


-1

这些是整数类型,因为在 C++ 中存储整数类型或字符时,它以整数格式存储(甚至字符也是以 ASCII 格式存储)。但浮点数不是这样存储的,我们没有任何方法将浮点数转换为二进制格式。


你好,欢迎来到 Stack Overflow。仅有文本的回答通常不太有用,除非它们解释了自己的作用。请考虑添加一些关于你所做的更改或编写的解释或参考资料。 - Saud Khan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接