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

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

このコミットは、Go言語の標準ライブラリmathパッケージにおける三角関数(Asin, Acos, Atan, Sin, Cos, Tan)のドキュメンテーションを修正し、これらの関数が引数としてラジアンを使用することを明示的に記述するものです。機能的な変更は伴わず、既存の振る舞いをより明確に伝えるためのドキュメンテーションの改善が主眼となっています。

コミット

commit 97958827048ae380ffa7ca26b49c60b6bbaa4ff5
Author: Rob Pike <r@golang.org>
Date:   Mon Oct 7 16:32:47 2013 -0700

    math: the trig functions work in radians; document that
    Fixes #6543
    6543 is also a fine NGC object.
    
    R=golang-dev, dsymonds, kamil.kisiel, minux.ma
    CC=golang-dev
    https://golang.org/cl/14515044

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

https://github.com/golang/go/commit/97958827048ae380ffa7ca26b49c60b6bbaa4ff5

元コミット内容

Go言語のmathパッケージに含まれる三角関数(Asin, Acos, Atan, Sin, Cos, Tan)が、引数としてラジアンを使用することを明示的にドキュメントに追記する。

変更の背景

この変更は、Go言語のmathパッケージにおける三角関数のドキュメンテーションが、その引数の単位(角度またはラジアン)を明確に指定していなかったことに対する修正です。多くのプログラミング言語や数学ライブラリにおいて、三角関数はデフォルトでラジアンを単位として扱うのが一般的ですが、ドキュメンテーションにその旨が明記されていない場合、ユーザーが誤解する可能性があります。

コミットメッセージにある "Fixes #6543" は、GoのIssueトラッカーにおける特定の課題(Issue 6543)を解決することを示しています。このIssueは、おそらく三角関数の引数単位に関する混乱や誤用を防ぐために、ドキュメンテーションの明確化を求めるものであったと推測されます。Rob Pike氏によるこの修正は、ライブラリの使いやすさと正確な理解を促進するための、細部への配慮を示しています。

前提知識の解説

1. 三角関数

三角関数は、角度と直角三角形の辺の比率の関係を記述する数学関数です。主要な三角関数には、サイン(sin)、コサイン(cos)、タンジェント(tan)があります。これらの逆関数として、アークサイン(asin)、アークコサイン(acos)、アークタンジェント(atan)などがあります。

2. 角度の単位:度とラジアン

角度を表す単位には主に「度(degree)」と「ラジアン(radian)」の2種類があります。

  • 度(Degree): 円周を360等分した単位で、1周が360度です。日常生活で最も一般的に使われます。
  • ラジアン(Radian): 円の半径と同じ長さの弧が円の中心に対してなす角度を1ラジアンと定義します。数学や物理学、特に微積分学においては、ラジアンが標準的な単位として用いられます。1周は$2\pi$ラジアンに相当します(約6.28ラジアン)。

度とラジアンの変換:

  • 度からラジアンへ: ラジアン = 度 × (π / 180)
  • ラジアンから度へ: 度 = ラジアン × (180 / π)

プログラミング言語の数学ライブラリでは、計算の都合上、三角関数はラジアンを引数として受け取るのが一般的です。これは、ラジアンが数学的な解析(特に微積分)においてより自然な単位であるためです。

3. Go言語のmathパッケージ

Go言語の標準ライブラリには、基本的な数学関数を提供するmathパッケージが含まれています。このパッケージは、浮動小数点数に対する三角関数、指数関数、対数関数、平方根などの機能を提供します。mathパッケージの関数は、IEEE 754倍精度浮動小数点数(float64)を扱います。

技術的詳細

このコミットは、Go言語のsrc/pkg/mathディレクトリ内の複数のファイルに対して行われたドキュメンテーションの変更です。具体的には、asin.go, atan.go, sin.go, tan.goの各ファイルにおいて、対応する三角関数のコメントに「in radians」または「of the radian argument」という文言が追加されています。

これは、関数の振る舞いを変更するものではなく、単に関数の引数がラジアン単位であることを明示的に示すためのものです。Go言語のmathパッケージの三角関数は、このコミット以前からラジアンを単位としていましたが、その点がドキュメンテーションで明確にされていなかったため、ユーザーが誤解する可能性がありました。この修正により、APIの利用者が関数の期待する入力形式を正確に理解できるようになります。

例えば、Asin関数のドキュメンテーションは、// Asin returns the arcsine of x. から // Asin returns the arcsine, in radians, of x. へと変更されています。これにより、Asinが返す値がラジアン単位であることを明確にしています。同様に、Sin関数のドキュメンテーションは、// Sin returns the sine of x. から // Sin returns the sine of the radian argument x. へと変更され、引数がラジアンであることを強調しています。

このようなドキュメンテーションの改善は、ライブラリの使いやすさと堅牢性を高める上で非常に重要です。特に、数学関数のように単位の解釈が結果に大きく影響する場合、その明示性は不可欠です。

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

以下のファイルでドキュメンテーションの変更が行われています。

  • src/pkg/math/asin.go
  • src/pkg/math/atan.go
  • src/pkg/math/sin.go
  • src/pkg/math/tan.go

各ファイルの変更は、関数のコメント行に「in radians」または「of the radian argument」というフレーズを追加するものです。

src/pkg/math/asin.go

--- a/src/pkg/math/asin.go
+++ b/src/pkg/math/asin.go
@@ -11,7 +11,7 @@ package math
  	after appropriate range reduction.
  */
  
-// Asin returns the arcsine of x.
+// Asin returns the arcsine, in radians, of x.
 //
 // Special cases are:
 //	Asin(±0) = ±0
@@ -44,7 +44,7 @@ func asin(x float64) float6	return temp
 }
  
-// Acos returns the arccosine of x.
+// Acos returns the arccosine, in radians, of x.
 //
 // Special case is:
 //	Acos(x) = NaN if x < -1 or x > 1

src/pkg/math/atan.go

--- a/src/pkg/math/atan.go
+++ b/src/pkg/math/atan.go
@@ -87,7 +87,7 @@ func satan(x float64) float64 {
  	return Pi/4 + xatan((x-1)/(x+1)) + 0.5*Morebits
  }
  
-// Atan returns the arctangent of x.
+// Atan returns the arctangent, in radians, of x.
 //
 // Special cases are:
 //      Atan(±0) = ±0

src/pkg/math/sin.go

--- a/src/pkg/math/sin.go
+++ b/src/pkg/math/sin.go
@@ -109,7 +109,7 @@ var _cos = [...]float64{
  	4.16666666666665929218E-2,   // 0x3fa555555555554b
  }
  
-// Cos returns the cosine of x.
+// Cos returns the cosine of the radian argument x.
 //
 // Special cases are:
 //	Cos(±Inf) = NaN
@@ -165,7 +165,7 @@ func cos(x float64) float64 {
  	return y
 }
  
-// Sin returns the sine of x.
+// Sin returns the sine of the radian argument x.
 //
 // Special cases are:
 //	Sin(±0) = ±0

src/pkg/math/tan.go

--- a/src/pkg/math/tan.go
+++ b/src/pkg/math/tan.go
@@ -73,7 +73,7 @@ var _tanQ = [...]float64{
  	-5.38695755929454629881E7, //0xc189afe03cbe5a31
  }
  
-// Tan returns the tangent of x.
+// Tan returns the tangent of the radian argument x.
 //
 // Special cases are:
 //	Tan(±0) = ±0

コアとなるコードの解説

このコミットにおける「コアとなるコードの変更」は、Go言語のmathパッケージ内の三角関数に関するコメントの修正です。具体的には、以下の関数定義の直前にあるドキュメンテーションコメントが更新されています。

  • Asin (arcsin)
  • Acos (arccos)
  • Atan (arctan)
  • Sin (sine)
  • Cos (cosine)
  • Tan (tangent)

これらの関数は、数学的な三角関数をGo言語で実装したものであり、引数として角度を受け取り、その三角比を返します。しかし、数学やプログラミングの文脈では、角度の単位として「度」と「ラジアン」の2つが主要であり、どちらを使用するかが明確でないと誤解を招く可能性があります。

このコミット以前は、これらの関数のドキュメンテーションには引数の単位が明示されていませんでした。しかし、Go言語のmathパッケージの内部実装では、これらの関数は常にラジアンを単位として処理していました。今回の変更は、この既存の振る舞いをドキュメンテーションに反映させ、ユーザーが関数を正しく利用できるようにするためのものです。

例えば、Asin関数のコメントは、元々「// Asin returns the arcsine of x.」となっていましたが、変更後は「// Asin returns the arcsine, in radians, of x.」となりました。これにより、Asinが返す値がラジアン単位であることが明確に示されます。同様に、Sin関数のコメントは「// Sin returns the sine of x.」から「// Sin returns the sine of the radian argument x.」に変更され、引数がラジアンであることを強調しています。

この変更は、コードの機能的な振る舞いには一切影響を与えません。既存のGoプログラムがmathパッケージの三角関数を使用している場合、このコミットによってその動作が変わることはありません。しかし、ドキュメンテーションがより正確になったことで、新規の開発者や、三角関数の単位について疑問を持つ開発者が、より迅速かつ正確にAPIの仕様を理解できるようになります。これは、ライブラリの品質と使いやすさを向上させる上で非常に重要な改善です。

関連リンク

参考にした情報源リンク