一尘不染

为什么Go中有int而不是float?

go

在Go中,有int可能等同于int32int64取决于系统架构的类型。我可以声明一个整数变量而不必担心它的大小:

var x int

为什么没有type float,它等于float32float64取决于我的系统的体系结构?我希望我也可以:

var x float

阅读 161

收藏
2020-07-02

共1个答案

一尘不染

float已在版本2011/01/20中删除。

您仍然可以使用简短的变量声明

x := 0.

但正如GO常见问题解答所述

出于可移植性的原因,我们决定以代码中的一些显式转换为代价,使事情变得清晰明了。


您可以在以下主题中查看2011年之前的辩论:

我什至对摆脱无用的浮点数和复杂类型的建议感到有些沮丧。
一代人都不需要真正解决这个问题(人类一代,而不是计算机一代;> 90年代初是最后一次真正成为问题),但这正是我认为的时刻它再次变得相关。
在过渡到64位芯片和过渡到非基于Intel的平台(移动芯片,GPU等)之间,我认为删除这些类型是一个巨大的错误。

类比整数类型和浮点类型的问题是:

  • 在整数类型的情况下,您并不关心大小,除非它溢出
    * 对于浮点类型,您始终需要注意大小,因为它总是会影响您的答案(除非您仅在涉及小整数2^n情况下进行算术运算,否则这种情况是准确的,在这种情况下您会更好(带有定点表示)。
    因此
    ,“我只想要一个好的代表”就不可能有同样的可能性* 。

除了在内存使用(和缓存)方面,32位浮点数从未具有速度优势,因此现有的32位浮点数类型未定义为“快速”浮点数。它就在那儿(我想),因为这就是C语言中所说的。我不反对如果float64被称为“
double”(在我所知道的大多数语言中都是这样)。

但是我真的认为,如果没有“ float”类型,该语言会更好。
大小对于任何浮点数的使用确实很重要,无论是由于内存消耗还是由于所需的精度。

2020-07-02