【问题标题】:Why do float and int have such different maximum values even though they're the same number of bits? [duplicate]为什么 float 和 int 具有如此不同的最大值,即使它们的位数相同? [复制]
【发布时间】:2012-06-24 21:17:15
【问题描述】:

可能重复:
what the difference between the float and integer data type when the size is same in java?

您可能知道,这两种类型都是 32 位的。int 只能保存整数,而float 也支持floating point 数字(正如类型名称所暗示的那样)。

int的最大值怎么可能是231float的最大值是3.4*1038,而两者其中有 32 位?

我认为int 的最大值容量应该高于浮点数,因为它不会为浮点数节省内存并且只接受整数。在这种情况下,我会很高兴得到解释。

【问题讨论】:

  • 你从哪里得到 3.4 * 10 ^ 38 的最大浮点值?
  • 浮点数的精度远低于整数。
  • 嗯...你说“浮点数”好像你很清楚这意味着什么,但真的吗?
  • 假设您有一个 int 值,它表示以美分为单位的价格,另一个 int 值表示以美元为单位的价格。问题是;以美元计的金额怎么可能超过以美分计的金额?如果你能回答这个问题,你就已经回答了你自己的问题。 ;)

标签: c# java c++ floating-point int


【解决方案1】:

您的直觉非常正确地告诉您,一个中的信息内容不能比另一个多,因为它们都有 32 位。但这并不意味着我们不能使用这些位来表示不同的值。

假设我发明了两种新的数据类型,uint4foo4uint4 使用 4 位来表示一个整数,在标准的二进制表示中,所以我们有

bits   value
0000       0
0001       1
0010       2
...
1111      15

但是foo4 使用 4 位来表示这些值:

bits   value
0000       0
0001      42
0010     -97
0011       1
...
1110      pi
1111       e

现在foo4 的值范围比uint4更广泛,尽管位数相同!如何?因为有一些uint4不能foo4 表示,所以位映射中的那些“槽”可用于其他值。


intfloat 相同 - 它们都可以存储一组 232 值中的值,只是 不同 组 232 个值。

【讨论】:

  • 非常有趣、易于理解(虽然不是技术性的)解释。我喜欢它。
  • 浮点数位结构的精彩解释:youtube.com/…
【解决方案2】:

浮点数可能存储更高的数值,但即使在小数点前的数字上也不会精确。 考虑以下示例:

float a = 123456789012345678901234567890f; //30 digits
Console.WriteLine(a);  // 1.234568E+29

请注意,几乎不会保留任何精度。

另一方面,整数将始终精确地存储其值范围内的任何数字。

为了比较,我们来看一个双精度浮点数:

double a = 123456789012345678901234567890d; //30 digits
Console.WriteLine(a); // 1.23456789012346E+29

请注意,保留的有效数字大约是原来的两倍。

【讨论】:

  • 您在此处演示如何写入控制台。这真的能告诉我们关于精度的任何信息吗?
  • 也许这个“控制台打印”示例更清楚(java代码): System.out.println(16828700f == 16828700f + 1f); // => 是的
【解决方案3】:

这些基于 IEEE754 浮点规范,这就是它可能的原因。请阅读此documentation。这不仅仅是关于多少位。

【讨论】:

    【解决方案4】:

    提示在“浮点”的“浮动”部分。你所说的基本上是假设固定点。浮点数不会为小数点后的数字“保留空间” - 它的位数是有限的(23 位二进制),并且会记住将其乘以的 2 的幂。

    【讨论】:

      猜你喜欢
      • 2013-12-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-05
      • 2016-12-07
      • 1970-01-01
      • 1970-01-01
      • 2018-04-10
      • 2022-06-30
      相关资源
      最近更新 更多