Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

[インデックス 18137] ファイルの概要

このコミットは、Go言語の公式仕様ドキュメント doc/go_spec.html 内の記述を修正するものです。具体的には、複素数定数の例におけるコメントの誤植を訂正しています。

コミット

commit 8183ed19b9de8dbc40e40041e530d796246f0514
Author: Mihai Borobocea <MihaiBorobocea@gmail.com>
Date:   Mon Dec 30 13:29:56 2013 -0800

    spec: example shows wrong value for complex constant
    
    Looks like a typo.
    Fixes #7011.
    
    R=golang-codereviews, r, bradfitz
    CC=golang-codereviews
    https://golang.org/cl/45350043

GitHub上でのコミットページへのリンク

https://github.com/golang/go/commit/8183ed19b9de8dbc40e40041e530d796246f0514

元コミット内容

このコミットは、Go言語の仕様書 doc/go_spec.html の以下の行を修正しています。

<pre>
const ic = complex(0, c)   // ic == 3.75i  (untyped complex constant)
const iΘ = complex(0, Θ)   // iΘ == 1.5i   (type complex128)
</pre>

この中で、iΘ == 1.5i とコメントされている部分が誤りであり、正しくは iΘ == 1i であると指摘されています。

変更の背景

この変更の背景には、Go言語の仕様書における複素数定数の例に誤った値が記載されていたという単純な誤植があります。コミットメッセージにも「Looks like a typo. (誤植のようだ)」と明記されており、Issue #7011 で報告された問題に対応しています。

Go言語の仕様書は、言語の挙動を正確に記述する非常に重要なドキュメントです。そのため、たとえ小さな誤植であっても、開発者が言語の挙動を誤解する原因となる可能性があるため、迅速に修正される必要があります。このコミットは、その品質維持の一環として行われました。

前提知識の解説

Go言語における複素数

Go言語は、組み込みで複素数型をサポートしています。complex64complex128 の2種類があり、それぞれ実部と虚部が float32 または float64 で構成されます。

  • complex64: 実部と虚部が float32 型の複素数。
  • complex128: 実部と虚部が float64 型の複素数。

複素数は、complex 関数を使って作成できます。complex(real, imag) の形式で、実部と虚部を指定します。

例:

c1 := complex(1, 2) // 1 + 2i (type complex128 by default if arguments are untyped floats)
c2 := complex(3.0, 4.0) // 3 + 4i
c3 := complex(float32(5), float32(6)) // 5 + 6i (type complex64)

Go言語における定数

Go言語の定数は、コンパイル時に値が決定される不変のエンティティです。定数には型が明示的に指定される場合と、型が指定されない「型なし定数 (untyped constant)」があります。

型なし定数は、その値が使用される文脈によって型が推論されます。これにより、異なる数値型(int, float64, complex128 など)の間で柔軟に定数を使用できます。

今回のコミットで問題となっているのは、complex(0, Θ) のような式で、Θ が型なしの浮動小数点数定数である場合に、その結果がどのように評価されるかという点です。

Go言語の仕様書 (go_spec.html)

go_spec.html は、Go言語の公式な言語仕様を記述したHTMLドキュメントです。Go言語の構文、セマンティクス、組み込み型、関数、パッケージなど、言語のあらゆる側面が詳細に定義されています。開発者はこの仕様書を参照することで、Goプログラムの正確な挙動を理解することができます。

このドキュメントには、言語の各機能の理解を助けるためのコード例が多数含まれています。今回のコミットは、その中の複素数定数に関する例の誤りを修正するものです。

技術的詳細

このコミットの技術的な詳細は、Go言語の型なし定数と複素数型の相互作用、そして仕様書における例の正確性に関わっています。

問題の箇所は以下の通りです。

<pre>
const ic = complex(0, c)   // ic == 3.75i  (untyped complex constant)
const iΘ = complex(0, Θ)   // iΘ == 1.5i   (type complex128)
</pre>

ここで、Θ はギリシャ文字のシータであり、Go言語の仕様書では通常、特定の数値定数を表すために使用されます。この文脈では、Θ1 を表す型なしの浮動小数点数定数として扱われるべきでした。

complex(0, Θ) という式は、実部が 0、虚部が Θ の複素数を生成します。もし Θ1 であれば、結果は 0 + 1i、つまり 1i となります。

元のコメント // iΘ == 1.5i は、Θ1.5 であるかのような誤解を招くものでした。これは、おそらく単なる入力ミス(タイポ)であり、Goコンパイラの実際の挙動や言語仕様とは一致していませんでした。

この修正は、Go言語の仕様書が常に正確であり、開発者が誤った情報に基づいてコードを書くことを防ぐためのものです。仕様書は言語の「真実の源」であるため、その中の例はコンパイラの挙動と完全に一致している必要があります。

コアとなるコードの変更箇所

変更は doc/go_spec.html ファイルの1箇所のみです。

--- a/doc/go_spec.html
+++ b/doc/go_spec.html
@@ -3929,7 +3929,7 @@ an untyped complex constant.
 
 <pre>
 const ic = complex(0, c)   // ic == 3.75i  (untyped complex constant)
-const iΘ = complex(0, Θ)   // iΘ == 1.5i   (type complex128)
+const iΘ = complex(0, Θ)   // iΘ == 1i     (type complex128)
 </pre>
 
 <p>

具体的には、3929行目のコメントが 1.5i から 1i に変更されています。

コアとなるコードの解説

この変更は、Go言語の仕様書 doc/go_spec.html 内の複素数定数に関する例のコメントを修正するものです。

元のコードでは、以下の行がありました。 const iΘ = complex(0, Θ) // iΘ == 1.5i (type complex128)

ここで、Θ はGo言語の仕様書内でしばしば使用される、特定の数学的定数(この文脈では 1 を意味する)を表す記号です。complex(0, Θ) は、実部が 0、虚部が Θ の複素数を生成する関数呼び出しです。もし Θ1 であれば、この式の結果は 0 + 1i、すなわち 1i となります。

しかし、元のコメントでは iΘ == 1.5i となっており、これは Θ1.5 であるかのような誤解を招くものでした。これは明らかに誤植であり、Go言語の実際の挙動とは異なります。

修正後のコードは以下の通りです。 const iΘ = complex(0, Θ) // iΘ == 1i (type complex128)

この変更により、コメントが実際の計算結果と一致するようになり、仕様書の正確性が向上しました。この修正は、Go言語の仕様書が開発者にとって信頼できる情報源であり続けるために重要です。

関連リンク

参考にした情報源リンク

このコミットは、Go言語の公式仕様ドキュメント doc/go_spec.html 内の記述を修正するものです。具体的には、複素数定数の例におけるコメントの誤植を訂正しています。

コミット

commit 8183ed19b9de8dbc40e40041e530d796246f0514
Author: Mihai Borobocea <MihaiBorobocea@gmail.com>
Date:   Mon Dec 30 13:29:56 2013 -0800

    spec: example shows wrong value for complex constant
    
    Looks like a typo.
    Fixes #7011.
    
    R=golang-codereviews, r, bradfitz
    CC=golang-codereviews
    https://golang.org/cl/45350043

GitHub上でのコミットページへのリンク

https://github.com/golang/go/commit/8183ed19b9de8dbc40e40041e530d796246f0514

元コミット内容

このコミットは、Go言語の仕様書 doc/go_spec.html の以下の行を修正しています。

<pre>
const ic = complex(0, c)   // ic == 3.75i  (untyped complex constant)
const iΘ = complex(0, Θ)   // iΘ == 1.5i   (type complex128)
</pre>

この中で、iΘ == 1.5i とコメントされている部分が誤りであり、正しくは iΘ == 1i であると指摘されています。

変更の背景

この変更の背景には、Go言語の仕様書における複素数定数の例に誤った値が記載されていたという単純な誤植があります。コミットメッセージにも「Looks like a typo. (誤植のようだ)」と明記されており、Issue #7011 で報告された問題に対応しています。

Go言語の仕様書は、言語の挙動を正確に記述する非常に重要なドキュメントです。そのため、たとえ小さな誤植であっても、開発者が言語の挙動を誤解する原因となる可能性があるため、迅速に修正される必要があります。このコミットは、その品質維持の一環として行われました。

前提知識の解説

Go言語における複素数

Go言語は、組み込みで複素数型をサポートしています。complex64complex128 の2種類があり、それぞれ実部と虚部が float32 または float64 で構成されます。

  • complex64: 実部と虚部が float32 型の複素数。
  • complex128: 実部と虚部が float64 型の複素数。

複素数は、complex 関数を使って作成できます。complex(real, imag) の形式で、実部と虚部を指定します。

例:

c1 := complex(1, 2) // 1 + 2i (type complex128 by default if arguments are untyped floats)
c2 := complex(3.0, 4.0) // 3 + 4i
c3 := complex(float32(5), float32(6)) // 5 + 6i (type complex64)

Go言語における定数

Go言語の定数は、コンパイル時に値が決定される不変のエンティティです。定数には型が明示的に指定される場合と、型が指定されない「型なし定数 (untyped constant)」があります。

型なし定数は、その値が使用される文脈によって型が推論されます。これにより、異なる数値型(int, float64, complex128 など)の間で柔軟に定数を使用できます。

今回のコミットで問題となっているのは、complex(0, Θ) のような式で、Θ が型なしの浮動小数点数定数である場合に、その結果がどのように評価されるかという点です。

Go言語の仕様書 (go_spec.html)

go_spec.html は、Go言語の公式な言語仕様を記述したHTMLドキュメントです。Go言語の構文、セマンティクス、組み込み型、関数、パッケージなど、言語のあらゆる側面が詳細に定義されています。開発者はこの仕様書を参照することで、Goプログラムの正確な挙動を理解することができます。

このドキュメントには、言語の各機能の理解を助けるためのコード例が多数含まれています。今回のコミットは、その中の複素数定数に関する例の誤りを修正するものです。

技術的詳細

このコミットの技術的な詳細は、Go言語の型なし定数と複素数型の相互作用、そして仕様書における例の正確性に関わっています。

問題の箇所は以下の通りです。

<pre>
const ic = complex(0, c)   // ic == 3.75i  (untyped complex constant)
const iΘ = complex(0, Θ)   // iΘ == 1.5i   (type complex128)
</pre>

ここで、Θ はギリシャ文字のシータであり、Go言語の仕様書では通常、特定の数値定数を表すために使用されます。この文脈では、Θ1 を表す型なしの浮動小数点数定数として扱われるべきでした。

complex(0, Θ) という式は、実部が 0、虚部が Θ の複素数を生成します。もし Θ1 であれば、結果は 0 + 1i、つまり 1i となります。

元のコメント // iΘ == 1.5i は、Θ1.5 であるかのような誤解を招くものでした。これは、おそらく単なる入力ミス(タイポ)であり、Goコンパイラの実際の挙動や言語仕様とは一致していませんでした。

この修正は、Go言語の仕様書が常に正確であり、開発者が誤った情報に基づいてコードを書くことを防ぐためのものです。仕様書は言語の「真実の源」であるため、その中の例はコンパイラの挙動と完全に一致している必要があります。

コアとなるコードの変更箇所

変更は doc/go_spec.html ファイルの1箇所のみです。

--- a/doc/go_spec.html
+++ b/doc/go_spec.html
@@ -3929,7 +3929,7 @@ an untyped complex constant.
 
 <pre>
 const ic = complex(0, c)   // ic == 3.75i  (untyped complex constant)
-const iΘ = complex(0, Θ)   // iΘ == 1.5i   (type complex128)
+const iΘ = complex(0, Θ)   // iΘ == 1i     (type complex128)
 </pre>
 
 <p>

具体的には、3929行目のコメントが 1.5i から 1i に変更されています。

コアとなるコードの解説

この変更は、Go言語の仕様書 doc/go_spec.html 内の複素数定数に関する例のコメントを修正するものです。

元のコードでは、以下の行がありました。 const iΘ = complex(0, Θ) // iΘ == 1.5i (type complex128)

ここで、Θ はGo言語の仕様書内でしばしば使用される、特定の数学的定数(この文脈では 1 を意味する)を表す記号です。complex(0, Θ) は、実部が 0、虚部が Θ の複素数を生成する関数呼び出しです。もし Θ1 であれば、この式の結果は 0 + 1i、すなわち 1i となります。

しかし、元のコメントでは iΘ == 1.5i となっており、これは Θ1.5 であるかのような誤解を招くものでした。これは明らかに誤植であり、Go言語の実際の挙動とは異なります。

修正後のコードは以下の通りです。 const iΘ = complex(0, Θ) // iΘ == 1i (type complex128)

この変更により、コメントが実際の計算結果と一致するようになり、仕様書の正確性が向上しました。この修正は、Go言語の仕様書が開発者にとって信頼できる情報源であり続けるために重要です。

関連リンク

参考にした情報源リンク