Go为复数定义了两种数字类型,分别为complex64
和complex128
。这很少见。大多数编程语言将复数定义为真实和复杂部分的组合,而不是为此目的包含特定的原语。 (即使在群论中,复数也被形式化地表示为实数对)为什么Go的设计者决定Go需要复数的原始类型?Go为什么复数是原始数字类型?
回答
因为他们死了有用吗?和:去复数就是这样:一个真实的和想象的部分。
这并不能解释为什么它们被定义为基本的数据类型,而不是被定义为一个元组并且包装在数学库中,就像许多其他语言一样。 –
你想要复杂数字的数学/大/鼠的语法吗?可能不会。如果'x'和'y'不是原始类型,则不能在Go中执行'x + y',因为没有操作符重载。 – Volker
好点。我之前从复杂基元使用以下语言发现了此讨论:https://groups.google.com/forum/#!msg/golang-nuts/7bW5JmUbAB8/-UF5ZV8qGZYJ。看起来操作符重载的缺乏确实是使用非本地复数编写干净代码时的一个问题。所以看起来复杂的数字被添加为一个原始的 - 一个小的设计变化带来了很多好处。增加运算符重载也可以解决问题,但会增加语言的复杂性。如果您在回答正文中提及运营商超载问题,我会接受它。 –
作为Go主要作者之一的Ken Thompson想要在Go中使用复数,因此他将它们添加到Go语言规范中,并为Go gc编译器实现了复数。
事实上,他在我之前联系过的讨论(https://groups.google.com/d/msg/golang-nuts/7bW5JmUbAB8/rJLvwYzqRmEJ)中评论说:“我对此感兴趣,希望能够做点什么。”看起来他像。 –
他在那里停下来很遗憾。复数是有用的,但可以在图书馆中轻松完成。理性数字也是有用的,并且*只*在库中可用。使用有理数的代码看起来非常可怕,而复数有很好的运算符,这是令人不愉快的不平衡。运营商超载(至少对于主要的4+ - * /)将比复合数字支持IMO更为广泛有用。这可以通过一个特殊的界面来完成,任何图书馆必须满足这些特殊的界面才能符合算术运算符。 –
我同意。有理数与群理论中的复数的构造非常相似,就像数对上的等价类一样。升级一个而不是另一个是没有意义的。 –
- 1. Java:为什么“long”原始类型不接受简单数字?
- 2. 为什么原始数组的多态类型是危险的
- 3. 为什么原始类型的数组不被视为对象
- 4. 什么是C++中最大的数字原始数据类型(旧/新标准)
- 5. 数字原始数据类型
- 6. 什么是“符号”的原始数据在JavaScript类型
- 7. Java:复制非原始类型数组
- 8. Excel - 恢复原始数据类型
- 9. 为什么Java中有原始数据类型?
- 10. 为什么原始数据类型在java.util.ArrayList中不允许?
- 11. D中原始字符类型的局限性是什么?
- 12. SharePoint - 什么类型是数字字段
- 13. 为什么返回类型Observable比原始类型好?
- 14. 为什么`str`是一个原始类型?
- 15. 为什么“这”始终是在原型窗口的JavaScript类
- 16. 原始数据类型为空
- 17. 关于mybatis的参数类型为原始数据类型?
- 18. SSE数据类型和原始类型
- 19. 类型化数据集奇怪行为的原因是什么?
- 20. 什么是相应的C++数据类型为SQL数字(18,0)数据类型?
- 21. 为什么C#将整数类型作为结构体而不是原始类型?
- 22. 什么是原始发布数据
- 23. NSXMLParser - 原始数据是什么?
- 24. 整型为原始类型
- 25. 为什么原始数组也排序?
- 26. 为什么arr.reverse()颠倒原始数组
- 27. 这是什么类型的数字?
- 28. 为什么数字类型只有`to_string()`?
- 29. 如果我使用原始类型作为参数调用泛型方法,将使用什么类型参数?
- 30. typedef - 原始类型到原始类型
C内置复数; C99添加了它们,但C11使它们成为可选项。 –