因此,我知道这可能是一个非常天真的问题,但我对Scala和其他类似的语言并不熟悉,这理所当然地让我费解。
为什么Scala (和其他语言)对于整数和双数有两个不同的类?既然整数在浮点数(1.0 = 1)中,那么为什么还要使用Int类呢?
我有点理解,也许你想确保一些整数永远不会变成浮点数,或者你想防止出现像1.00000000002 != 1这样的现象,当你只看到前几位数时,这可能会让人困惑,但我是否还遗漏了其他一些潜在的理由呢?
谢谢!
发布于 2013-09-07 01:50:21
整数对于软件的内部工作是很重要的,因为许多东西在内部被实现为整数,而您不一定会认为它们是“数字”。例如,内存地址通常表示为整数;单个8位字节通常被设想为一个字节整数;字符(如ASCII字符和Unicode字符)通常由整数值代码点标识。(顺便说一句,在所有这些情况下,在我们想要显示它们的罕见事件中,我们通常使用十六进制表示法,这很方便,因为它每8位字节使用两个字符。)另一个重要的情况是数组索引,通常被认为是数值,甚至在外部编程中也是如此;即使在数学中,长度为3的数组也会有编号为1、2和3的元素(尽管在编程中,包括Scala在内的许多语言将使用索引0、1和2,有时是因为将索引映射到内存地址的底层方案,有时是由于与旧语言这样做有关的历史原因)。
更普遍的是,计算中的许多东西(以及现实世界中的)都是严格量化的;编写"2.4表行“或"2.4循环迭代”是没有意义的,因此有一个算术精确、表示精确整数的数据类型是很方便的。
但是,这一区别并不是绝对必要的;许多脚本语言,如Perl和JavaScript以及Tcl,基本上都放弃了整数和浮点数之间的明确区别(尽管在解释器的工作中仍然经常会有这种区别,在需要时转换会隐式进行)。例如,在JavaScript中,typeof 3和typeof 3.0都是'number'。
发布于 2013-09-07 02:06:33
整数通常更容易使用,因为它们有精确的表示。这不仅在软件层面如此,在硬件层面也是如此。例如,看看描述x86体系结构的这个源,浮点加法通常比整数加法长4倍。因此,出于性能和可用性的考虑,分离这两种类型的操作是有利的。
发布于 2013-09-07 15:24:16
要添加到其他两个答案中,整数实际上并不是浮动的。也就是说,有些整数不能精确地用浮点数表示:
scala> Int.MaxValue.toFloat == (Int.MaxValue - 1).toFloat
res0: Boolean = true长和双打也是一样。
https://stackoverflow.com/questions/18668767
复制相似问题