2014-03-03 2 views
2

go는 복소수에 대해 두 개의 숫자 유형, complex64complex128을 정의합니다. 이것은 드물다. 대부분의 프로그래밍 언어는 목적을위한 특정 프리미티브를 포함하기보다는 실제 숫자와 복잡한 숫자의 조합으로 복소수를 정의합니다. (그룹 이론에서도 복소수는 형식적으로 실수 쌍으로 구성됩니다.) 이동 디자이너는 왜 복소수에 원시 유형이 필요하다고 Go의 설계자가 결정 했습니까?왜 복소수가 이동의 원시 숫자 유형입니까?

+2

C에는 내장 숫자가 있습니다. C99은 그것들을 추가했지만 C11은 그것들을 선택적으로 만들었습니다. –

답변

1

유용하기 때문에 유용합니까? 그리고 : 복소수 숫자는 바로 그것입니다 : 실수와 허수입니다.

+0

다른 많은 언어 에서처럼 터플로 정의되지 않고 수학 라이브러리로 래핑되지 않고 원시 데이터 형식으로 정의 된 이유는 설명하지 않습니다. –

+4

복소수에 대해 math/big/Rat 구문을 원하십니까? 아마도 그렇지 않습니다. 연산자 오버로딩이 없으므로'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

동의합니다. 합리적인 수는 그룹 이론의 복소수와 매우 비슷하게 숫자 쌍의 등가 클래스로 구성됩니다. 하나를 업그레이드하고 다른 하나는 업그레이드하지 않는 것이 좋습니다. –

관련 문제