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

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

このコミットは、Go言語の標準ライブラリmathパッケージ内の定数定義ファイルsrc/pkg/math/const.goにおけるコメントスタイルの変更に関するものです。具体的には、複数行コメント/* ... */を単一行コメント//に置き換えることで、コードの可読性を向上させています。

コミット

commit 28e0e1886393cac863074631cc336de6b73a45bb
Author: Robert Griesemer <gri@golang.org>
Date:   Thu Feb 23 10:17:24 2012 -0800

    math: slightly more readable comments
    
    Replaced /*-style comments with line comments;
    there are two many *'s already in those lines.
    
    R=golang-dev, rsc
    CC=golang-dev
    https://golang.org/cl/5699051

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

https://github.com/golang/go/commit/28e0e1886393cac863074631cc336de6b73a45bb

元コミット内容

このコミットの目的は、mathパッケージ内のコメントをより読みやすくすることです。具体的には、/*-styleのコメントを単一行コメントに置き換えました。これは、対象の行にすでに多くの*(アスタリスク)が存在するため、/*形式のコメントが視覚的にノイズになっていたためです。

変更の背景

Go言語のmathパッケージには、MaxFloat32SmallestNonzeroFloat32といった浮動小数点数の最大値や最小非ゼロ値などの重要な定数が定義されています。これらの定数には、その値がどのように導出されたかを示す数学的な式がコメントとして付随していました。

元のコードでは、これらの数学的な式が/* ... */という複数行コメントの形式で記述されていました。しかし、これらの式自体が**(べき乗)などのアスタリスクを多用するため、コメントの開始・終了を示す/**/、そして複数行コメントの各行の先頭に慣習的に付けられる*が、式の可読性を損ねていました。

コミットメッセージにある「there are two many *'s already in those lines.」という記述は、この視覚的なノイズを指しています。この変更は、コードの機能には影響を与えず、純粋にコードの保守性と可読性を向上させるためのものです。

前提知識の解説

Go言語のコメント

Go言語には主に2種類のコメントスタイルがあります。

  1. 単一行コメント (//): 行の残りの部分をコメントアウトします。
    // これは単一行コメントです
    
  2. 複数行コメント (/* ... */): /*で始まり*/で終わるブロック内のすべてをコメントアウトします。通常、関数やパッケージのドキュメントコメントとして使用されます。
    /*
    これは
    複数行コメントです
    */
    
    慣習として、複数行コメントの各行の先頭にはアスタリスク*が付けられることが多いです。

浮動小数点数の表現 (IEEE 754)

MaxFloat32, SmallestNonzeroFloat32, MaxFloat64, SmallestNonzeroFloat64といった定数は、IEEE 754標準で定義される浮動小数点数の特性に基づいています。

  • float32: 単精度浮動小数点数。32ビットで表現され、符号部1ビット、指数部8ビット、仮数部23ビットで構成されます。
    • MaxFloat32: 2**127 * (2**24 - 1) / 2**23 は、float32で表現できる最大の有限値の近似式です。指数部が最大値(127)で、仮数部が全て1(正規化された仮数部が1.11...1)の場合に相当します。
    • SmallestNonzeroFloat32: 1 / 2**(127 - 1 + 23) は、float32で表現できる最小の正の非ゼロ値(非正規化数)の近似式です。指数部が最小値(-126)で、仮数部が最小値(0.00...1)の場合に相当します。
  • float64: 倍精度浮動小数点数。64ビットで表現され、符号部1ビット、指数部11ビット、仮数部52ビットで構成されます。
    • MaxFloat64: 2**1023 * (2**53 - 1) / 2**52 は、float64で表現できる最大の有限値の近似式です。
    • SmallestNonzeroFloat64: 1 / 2**(1023 - 1 + 52) は、float64で表現できる最小の正の非ゼロ値(非正規化数)の近似式です。

これらのコメントは、これらの定数がIEEE 754の仕様に基づいてどのように計算されるかを示しており、その値の根拠を明確にしています。

技術的詳細

このコミットの技術的な変更は非常にシンプルで、Go言語のコメント構文の変更に限定されます。

変更前は、以下のような形式でした。

MaxFloat32             = 3.40282346638528859811704183484516925440e+38  /* 2**127 * (2**24 - 1) / 2**23 */

この形式では、数学的な式2**127 * (2**24 - 1) / 2**23の中に**というアスタリスクが含まれています。これに加えて、コメントの開始を示す/*と終了を示す*/、そして複数行コメントの慣習的なアスタリスクが加わることで、視覚的にアスタリスクが過剰になり、コメント自体の内容(数学式)が読みにくくなっていました。

変更後は、単一行コメント//を使用しています。

MaxFloat32             = 3.40282346638528859811704183484516925440e+38  // 2**127 * (2**24 - 1) / 2**23

この変更により、コメントの開始を示す//はアスタリスクを含まないため、数学式内の**と混同されることがなくなり、全体としてコメントがすっきりと読みやすくなりました。これは、コードの機能には全く影響を与えない、純粋なコードスタイルの改善です。

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

diff --git a/src/pkg/math/const.go b/src/pkg/math/const.go
index edb14f6fa4..f1247c383f 100644
--- a/src/pkg/math/const.go
+++ b/src/pkg/math/const.go
@@ -27,11 +27,11 @@ const (
 // Max is the largest finite value representable by the type.
 // SmallestNonzero is the smallest positive, non-zero value representable by the type.
 const (
-	MaxFloat32             = 3.40282346638528859811704183484516925440e+38  /* 2**127 * (2**24 - 1) / 2**23 */
-	SmallestNonzeroFloat32 = 1.401298464324817070923729583289916131280e-45 /* 1 / 2**(127 - 1 + 23) */
+	MaxFloat32             = 3.40282346638528859811704183484516925440e+38  // 2**127 * (2**24 - 1) / 2**23
+	SmallestNonzeroFloat32 = 1.401298464324817070923729583289916131280e-45 // 1 / 2**(127 - 1 + 23)
  
-	MaxFloat64             = 1.797693134862315708145274237317043567981e+308 /* 2**1023 * (2**53 - 1) / 2**52 */
-	SmallestNonzeroFloat64 = 4.940656458412465441765687928682213723651e-324 /* 1 / 2**(1023 - 1 + 52) */
+	MaxFloat64             = 1.797693134862315708145274237317043567981e+308 // 2**1023 * (2**53 - 1) / 2**52
+	SmallestNonzeroFloat64 = 4.940656458412465441765687928682213723651e-324 // 1 / 2**(1023 - 1 + 52)
 )
  
 // Integer limit values.

コアとなるコードの解説

変更されたファイルはsrc/pkg/math/const.goです。このファイルは、Go言語のmathパッケージで使用される様々な数学的定数を定義しています。

変更箇所は、MaxFloat32, SmallestNonzeroFloat32, MaxFloat64, SmallestNonzeroFloat64の4つの定数定義行です。

  • 変更前: 各定数の値の後に、/* ... */形式の複数行コメントでその値の導出式が記述されていました。
  • 変更後: 各定数の値の後に、// ...形式の単一行コメントで同じ導出式が記述されています。

この変更は、コメントのスタイルのみを変更し、定数の値やその意味、コードの動作には一切影響を与えません。純粋にコードの視覚的な整理と可読性の向上を目的としています。特に、数学的な式に含まれる**(べき乗)のアスタリスクとコメントのアスタリスクが混在することによる視覚的な混乱を解消しています。

関連リンク

参考にした情報源リンク