2014-03-03 43 views
2

Go为复数定义了两种数字类型,分别为complex64complex128。这很少见。大多数编程语言将复数定义为真实和复杂部分的组合,而不是为此目的包含特定的原语。 (即使在群论中,复数也被形式化地表示为实数对)为什么Go的设计者决定Go需要复数的原始类型?Go为什么复数是原始数字类型?

+2

C内置复数; C99添加了它们,但C11使它们成为可选项。 –

回答

1

因为他们死了有用吗?和:去复数就是这样:一个真实的和想象的部分。

+0

这并不能解释为什么它们被定义为基本的数据类型,而不是被定义为一个元组并且包装在数学库中,就像许多其他语言一样。 –

+4

你想要复杂数字的数学/大/鼠的语法吗?可能不会。如果'x'和'y'不是原始类型,则不能在Go中执行'x + y',因为没有操作符重载。 – Volker

+0

好点。我之前从复杂基元使用以下语言发现了此讨论:https://groups.google.com/forum/#!msg/golang-nuts/7bW5JmUbAB8/-UF5ZV8qGZYJ。看起来操作符重载的缺乏确实是使用非本地复数编写干净代码时的一个问题。所以看起来复杂的数字被添加为一个原始的 - 一个小的设计变化带来了很多好处。增加运算符重载也可以解决问题,但会增加语言的复杂性。如果您在回答正文中提及运营商超载问题,我会接受它。 –

2

作为Go主要作者之一的Ken Thompson想要在Go中使用复数,因此他将它们添加到Go语言规范中,并为Go gc编译器实现了复数。

+0

事实上,他在我之前联系过的讨论(https://groups.google.com/d/msg/golang-nuts/7bW5JmUbAB8/rJLvwYzqRmEJ)中评论说:“我对此感兴趣,希望能够做点什么。”看起来他像。 –

+2

他在那里停下来很遗憾。复数是有用的,但可以在图书馆中轻松完成。理性数字也是有用的,并且*只*在库中可用。使用有理数的代码看起来非常可怕,而复数有很好的运算符,这是令人不愉快的不平衡。运营商超载(至少对于主要的4+ - * /)将比复合数字支持IMO更为广泛有用。这可以通过一个特殊的界面来完成,任何图书馆必须满足这些特殊的界面才能符合算术运算符。 –

+0

我同意。有理数与群理论中的复数的构造非常相似,就像数对上的等价类一样。升级一个而不是另一个是没有意义的。 –

相关问题