0

目前刚学C#。

我不明白为什么有人可以使用浮点数或双精度数时会使用整数..

浮点数将添加/减去整数和十进制数,那么为什么有人会打扰使用普通的旧整数呢?

似乎 floats 或 double 会处理 Integer 可以处理的任何事情。数也..

谢谢!

4

8 回答 8

11

主要原因与我们经常喜欢使用整数分数而不是固定精度小数的原因相同。对于有理分数,(1/3) 乘以 3 始终为 1。(1/3) 加 (2/3) 始终为 1。(1/3) 乘以 2 为 (2/3)。

为什么?因为整数分数是精确的,就像整数是精确的一样。

但是对于固定精度的实数——它就不那么漂亮了。如果 (1/3) 是.33333,那么 3 次 (1/3) 将不是 1。如果 (2/3) 是.66666,那么 (1/3)+(2/3) 将不是一。但是如果 (2/3) 是.66667,那么 (1/3) 乘以 2 将不是 (2/3) 并且 1 减去 (1/3) 将不是 (2/3)。

而且,当然,您无法通过使用更多位置来解决此问题。没有小数位数可以让您准确表示 (1/3)。

浮点是一种固定精度的实数格式,很像我上面的固定精度小数。它并不总是遵循您可能期望的幼稚规则。请参阅经典论文What Every Computer Scientist Should Know About Floating-Point Arithmetic

为了回答您的问题,首先近似地,您应该尽可能使用整数,并且仅在必须时使用浮点数。而且您应该始终记住浮点数的精度有限,比较两个浮点数以查看它们是否相等可能会产生您可能意想不到的结果。

于 2012-11-26T13:45:48.767 回答
1

这里给出的大多数答案都直接涉及数学概念。使用整数有纯粹的计算原因。几个跳到脑海:

  1. 循环计数器,是的,我知道你可以在 for 循环中使用小数/双精度,但你真的需要那种复杂程度吗?
  2. 内部枚举值
  3. 数组索引
于 2012-11-26T13:58:06.933 回答
1

正如你在这里看到的,不同的类型都有自己的大小。

例如,在使用大型数据库时,intfloat可能会加倍所需的大小。

于 2012-11-26T13:42:31.777 回答
1

您有不同的数据类型,因为它们使用不同数量的位来存储数据。

通常,整数比双精度型使用更少的内存,这就是为什么不只使用最大可能的数据类型的原因。

http://en.wikipedia.org/wiki/Data_type

于 2012-11-26T13:42:46.050 回答
0

使用整数的主要原因是内存消耗和性能。

  1. 在大多数情况下,双精度数存储在 64b 内存块中(与 int 的 32b 相比)并使用有点复杂的表示标准(在某些情况下是实际值的近似值)
  2. 需要计算螳螂和指数的复杂表示。
  3. 在大多数情况下,它需要使用专用的协处理器进行浮点运算
  4. 对于整数,可以使用补码和移位来加速算术运算。
  5. 许多用例更适合(自然)使用整数,例如索引数组、循环、提醒除法、计数等。

此外,如果您需要使用表示实数的类型来完成所有这些操作,您的代码将更容易出错。

于 2012-11-26T13:56:01.900 回答
0

有几个原因。性能、内存,甚至不希望看到小数(无需使用格式字符串)。

于 2012-11-26T13:42:35.877 回答
0

浮点数

在计算中,浮点描述了一种表示近似实数的方法,该方法可以支持广泛的值。通常,数字大致表示为固定数量的有效数字,并使用指数进行缩放。

整数

在计算机科学中,整数整数数据类型的数据,表示数学整数的某个有限子集的数据类型。

因此,精度是一个论据。

于 2012-11-26T13:45:48.907 回答
0

有几个原因。首先,就像人们已经说过的那样,double 存储 64 位数值,而 int 只需要 32 位。

浮动是另一种情况。int 和 float 都存储 32 位数字,但 float 不太精确。浮点值最多可精确到 7 位,但除此之外它只是一个近似值。如果您有较大的数字,或者在某些情况下您有意只强制使用没有小数的整数值,则 int 是要走的路。如果您不关心精度损失并希望允许更大范围的值,则可以使用 float 代替。

于 2012-11-26T13:50:11.550 回答