Types 为什么围棋中有int而不是float?
在Go中,存在类型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 浮子被移除 您仍然可以使用: 但正如报告中提到的: 出于可移植性的原因,我们决定以代码中的一些显式转换为代价,使事情变得清晰明了 你可以看到辩论: 我有点沮丧,甚至看到有人建议取消无大小浮动和复杂类型。 人们已经有
int
,根据系统架构,该类型可能等效于int32
或int64
。我可以声明一个整数变量,而不用担心它的大小:
var x int
为什么没有类型float
,根据我的系统的体系结构,它相当于float32
或float64
?我希望我也能做到:
var x float
浮子被移除
您仍然可以使用:
但正如报告中提到的:
出于可移植性的原因,我们决定以代码中的一些显式转换为代价,使事情变得清晰明了
你可以看到辩论: 我有点沮丧,甚至看到有人建议取消无大小浮动和复杂类型。
人们已经有一代人没有真正解决这个问题了(人类一代,而不是计算机一代;90年代初是最后一次真正解决这个问题),但现在正是我认为它再次变得重要的时候。
在过渡到64位芯片和过渡到非基于Intel的平台之间 (移动芯片、GPU等),我认为去掉这些类型是一个巨大的错误 整数类型和浮点类型之间的类比问题在于:
- 对于整数类型,除非溢出,否则不关心大小李>
- 对于浮点类型,您总是需要关心大小,因为它总是影响您的答案(除非您只做涉及小整数的算术*
,在这种情况下,它是精确的,在这种情况下,最好使用定点表示)。2^n
因此,不存在“我只是想要一个好的表现”的可能性 - 对于浮点类型,您总是需要关心大小,因为它总是影响您的答案(除非您只做涉及小整数的算术*
无论是内存消耗还是所需的精度,大小对于任何浮点使用都非常重要
对于整数,通常需要一个整数类型,其大小为平台的本机字号:这具有性能优势,以及与使用字号的系统其他部分的低级别互操作性优势 对于浮点值,情况并非如此。即使在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.