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

时间:2014-06-22 18:37:57

标签: types floating-point go int

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

var x int

为什么不存在float类型,根据我的系统架构,它等同于float32float64?我希望我也可以这样做:

var x float

2 个答案:

答案 0 :(得分:11)

浮动已移除release 2011/01/20

您仍然可以使用short variable declaration

x := 0.

但正如GO FAQ中提到的那样:

  

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


你可以看到辩论before 2011 in this thread

  
    

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

  
     

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

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

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

     

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

答案 1 :(得分:7)

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

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

所以尽管你写了float32"等同于floatfloat32,取决于[你的]系统架构",我&#39 ;我不确定你觉得它应该等同于float64