GoogleのGoプログラミング言語の数学ライブラリメソッド


9

私はgoogle Golangでプログラミングをしていて、その簡潔さのために楽しんでいますが、Math標準ライブラリのメソッドのほとんどすべてが浮動小数点型用であることは驚くべきことです。これらのメソッドがintに存在しない特別な理由はありますか?

回答:


9

簡単に言えば、GoはCの後継であり、Cの標準数学ライブラリは、単精度および倍精度の浮動小数点値に関してもっぱら定義されています。

より長い答えは、Go(またはC)のような、ポリモーフィズムや関数のオーバーロードのない静的に型付けされた言語では、関数が事前に取得して返すための型を決定する必要があるということです。数学ライブラリに特定の型がある場合、浮動小数点数には整数よりも興味深い演算がたくさんあります。いくつかの例を選ぶ

  • 整数または浮動小数点数の平方根またはn乗根は通常、整数として表現できません

  • 超越関数の非常に少数の興味深い値は整数として表現可能

  • 浮動小数点値の除算は、整数の除算より少ない丸めを必要とします

これは、入力値が整数である場合に思われるほど面倒ではないことに注意してください。整数値は、単純な型キャストを使用して、ほとんど正確に浮動小数点値に変換できます。

これがGoやCなどの言語の話です。他の言語には他のオプションがあります。

  • 動的に型付けされた言語は、呼び出される対象や戻り値が整数として表現可能かどうかに応じて、複数の型を取得または返す数学ライブラリ関数を提供できます。

  • 関数のオーバーロードを伴う言語は、渡す型に応じて、同じ関数の複数のバージョンを提供できます(厳密には、これらは、動的に型付けされた上記のケースとは異なり、同じ名前の複数の関数です)。

  • ポリモーフィズム型の言語(継承を持つオブジェクト指向言語など)は、整数と浮動小数点値の両方のサブクラスを持つスーパークラス「Number」を定義し、このNumberクラスに関して数学関数を定義できます。このアプローチは、動的言語アプローチの柔軟性の多くを備えていますが、静的または関数オーバーロードのアプローチの厳格さのほとんどを維持しています。

ただし、Goにはこれらの機能はありません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.