Types 为什么围棋中有int而不是float?

Types 为什么围棋中有int而不是float?,types,floating-point,go,int,Types,Floating Point,Go,Int,在Go中,存在类型int,根据系统架构,该类型可能等效于int32或int64。我可以声明一个整数变量,而不用担心它的大小: var x int 为什么没有类型float,根据我的系统的体系结构,它相当于float32或float64?我希望我也能做到: var x float 浮子被移除 您仍然可以使用: 但正如报告中提到的: 出于可移植性的原因,我们决定以代码中的一些显式转换为代价,使事情变得清晰明了 你可以看到辩论: 我有点沮丧,甚至看到有人建议取消无大小浮动和复杂类型。 人们已经有

在Go中,存在类型
int
,根据系统架构,该类型可能等效于
int32
int64
。我可以声明一个整数变量,而不用担心它的大小:

var x int
为什么没有类型
float
,根据我的系统的体系结构,它相当于
float32
float64
?我希望我也能做到:

var x float
浮子被移除

您仍然可以使用:

但正如报告中提到的:

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


你可以看到辩论:

我有点沮丧,甚至看到有人建议取消无大小浮动和复杂类型。
人们已经有一代人没有真正解决这个问题了(人类一代,而不是计算机一代;90年代初是最后一次真正解决这个问题),但现在正是我认为它再次变得重要的时候。
在过渡到64位芯片和过渡到非基于Intel的平台之间 (移动芯片、GPU等),我认为去掉这些类型是一个巨大的错误

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

  • 对于整数类型,除非溢出,否则不关心大小
  • 对于浮点类型,您总是需要关心大小,因为它总是影响您的答案(除非您只做涉及小整数的算术*
    2^n
    ,在这种情况下,它是精确的,在这种情况下,最好使用定点表示)。
    因此,不存在“我只是想要一个好的表现”的可能性
除了内存使用(和缓存)方面,32位浮点从来没有速度优势,因此现有的32位浮点类型没有定义为“快速”浮点。它就在那里(我猜),因为这就是它在C中的名称。如果 float64被称为“double”,这在我所知道的大多数语言中都是如此

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


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

对于浮点值,情况并非如此。即使在32位系统上,双精度浮点(Go's
float64
)通常也比单精度(
float32
)更为常见,而且速度也不慢。单精度浮点运算相对不常见,通常只有在内存使用或输入输出速度需要考虑的时候才有用


所以,尽管你写的
float
“将等同于
float32
float64
,这取决于[你的]系统的架构,但我不确定你认为它应该等同于
float32

,尽管我相信不管架构如何,float总是64位的(不确定是否复杂)@Jsor是的,32位浮点可以导致。。。麻烦:是的,但有时有必要。图形硬件没有针对64位浮动进行优化,这一点都不好笑。直到几年前他们才得到支持。编辑:当然,你是对的,32位浮点的问题指出了为什么64位应该是默认值。我以前不知道有“float”和“complex”类型!:-)@Jsor:Re:“我相信浮点始终是64位的”:嗯,这不是规范所说的;在你解释之前,我认为在32位系统上,“float”应该等同于“float32”。我不知道float64通常比float32快,即使在32位系统上也是如此。@cd1:我很高兴我解释了这一点。也就是说,我应该提到的是,有些系统的
float32
速度更快(例如,在没有硬件支持的情况下,浮点运算因此完全在软件中实现)。因此,在这种情况下,这是完全有效的;只是一般来说情况并非如此,所以你似乎认为float64在大多数情况下“更好”。很好,那么“float”可能只是指“float64”。这样,程序员就不必知道上面解释的系统架构的细节。(他们从语言中删除“float”肯定还有其他很好的理由。)
x := 0.