C# 当我可以在C中使用浮点数或双精度数时,为什么要使用整数呢?

C# 当我可以在C中使用浮点数或双精度数时,为什么要使用整数呢?,c#,integer,C#,Integer,目前正在学习C 我不明白为什么有人会在可以使用浮点数或双精度的情况下使用整数 浮点数将加/减整数和十进制数,那么为什么有人会费心使用普通的旧整数呢 看起来float或double能够处理整数所能处理的任何事情。数字也是 谢谢 正如您在不同类型中所看到的,每个类型都有自己的大小 例如,在处理大型数据库时,int或float可能会使所需大小加倍。有几个原因。性能、内存,甚至不想看到小数而不必使用格式字符串。您有不同的数据类型,因为它们使用不同数量的位来存储数据 通常一个整数比一个double使用更少

目前正在学习C

我不明白为什么有人会在可以使用浮点数或双精度的情况下使用整数

浮点数将加/减整数和十进制数,那么为什么有人会费心使用普通的旧整数呢

看起来float或double能够处理整数所能处理的任何事情。数字也是

谢谢

正如您在不同类型中所看到的,每个类型都有自己的大小


例如,在处理大型数据库时,int或float可能会使所需大小加倍。

有几个原因。性能、内存,甚至不想看到小数而不必使用格式字符串。

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

通常一个整数比一个double使用更少的内存,这就是为什么不使用可能最大的数据类型


主要原因与我们通常喜欢使用整数分数而不是固定精度小数的原因相同。对于有理分数,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

浮点是一种固定精度的实数格式,很像我上面提到的固定精度小数。它并不总是遵循你可能期望的幼稚规则。见经典论文

为了回答您的问题,对于第一近似值,您应该尽可能使用整数,只有在必要时才使用浮点数。您应该始终记住,浮点数的精度是有限的,比较两个浮点数是否相等可以得到您可能无法预料的结果。

:

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

:

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


因此,精度是一个参数。

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


浮动是另一种情况。int和float都存储32位数字,但float精度较低。浮点值最多可精确到7位,但超过7位,它只是一个近似值。如果您有更大的数字,或者如果您有意只强制使用整数值,而不强制使用小数,那么int就是一个不错的选择。如果您不关心精度损失,并且希望允许更大范围的值,则可以使用浮点。

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

在大多数情况下,双精度存储器存储在64b内存块中,而INTA存储在32b内存块中。在某些情况下,双精度存储器使用一种较为复杂的标准来表示实际值的近似值 需要计算螳螂和指数的复杂表示法。 在大多数情况下,浮点运算需要使用专用协处理器 对于整数,可以使用补码和移位来加速算术运算。 在许多用例中,使用整数更合适,比如索引数组、循环、获取除法提示、计数等。
此外,如果您需要使用表示实数的类型来完成所有这些操作,那么您的代码将更容易出错

这里给出的大多数答案都直接涉及数学概念。使用整数纯粹有计算上的原因。我想到了几点:

循环计数器,是的,我知道你可以在for循环中使用十进制/双精度,但你真的需要那种复杂度吗? 内部枚举值 数组索引
关于浮点运算的缺点,您还有很多要学习的!从经典开始。用整数计算比用浮点数计算要快。我发现这是一个相当复杂的答案。问题不在于代表分数;它是关于表示整数的。类比推理能力弱;举一个具体的例子,在C语言中,整数比double能给你一个更正确的结果,这会更有帮助。是的,但在实践中,这到底有什么区别呢?