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

cd1*_*cd1 9 floating-point int types go

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

var x int
Run Code Online (Sandbox Code Playgroud)

为什么没有类型float,这将等同于float32或float64取决于我的系统的架构?我希望我也可以这样做:

var x float
Run Code Online (Sandbox Code Playgroud)

Von*_*onC 11

在2011/01/20发布中删除了浮动.

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

x := 0.
Run Code Online (Sandbox Code Playgroud)

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

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


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

即使看到摆脱未经过大小合并的浮动和复杂类型的建议,我有点沮丧.
人们不必真正处理这一代人的问题(一代人,而不是计算机一代;> 90年代早期是最后一次真正的问题),但这正是我认为的那个时刻.它再次变得相关.
在转换到64位芯片和过渡到非基于英特尔的平台(移动芯片,GPU等)之间,我认为取出这些类型是一个巨大的错误.

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

  • 在整数类型的情况下,除非溢出,否则不关心大小.
  • 在float类型的情况下,你总是需要关心大小,因为它总是会影响你的答案(除非你只是做涉及小整数的算法*2^n,在这种情况下它是准确的,在这种情况下你会更好用定点表示).
    所以"我只想要一个好的代表"的可能性不一样.

除了内存使用(和缓存)之外,32位浮点数从未有过速度优势,因此现有的32位浮点类型不会被定义为"快速"浮点数.它只是在那里(我推测),因为这就是它在C中所称的内容.如果float64被称为"double",我不会反对它,这在我所知道的大多数语言中都是如此.

但我真的认为没有"浮动"类型语言会更好.
对于任何浮点使用,大小确实很重要,无论是因为内存消耗还是因为所需的精度.


rua*_*akh 7

对于整数,通常需要一个整数类型,其大小是平台的本机字大小:这具有性能优势,以及与使用字大小的系统的其他部分的低级互操作性的好处.

对于浮点值,情况并非如此.即使在32位系统上,双精度浮点(Go float64)通常比单精度()更常见,并且通常不会更慢float32.单精度浮点运算相对不常见,通常仅在内存使用或输入输出速度更强的考虑因素时才有用.

因此,尽管您写的float"将等同于float32或float64取决于[您的]系统架构",但我不确定您认为它应该等同于哪种架构float32.