一部のプログラミング言語では、 1/3 や −11/17 などの有理数を丸めずに表現し、それらの演算を行うための組み込みの(プリミティブな)有理数データ型が提供されています。例としては、 Common Lispの型や、MathematicaやMapleなど、ほとんどの言語で代数計算用に提供されている類似の型があります。組み込みの有理数型を持たない多くの言語でも、ライブラリ定義の型として有理数型を提供しています。
ratio
表現
この型の変数または値は通常、分数 m / nとして表されます。ここで、mとn は、固定精度または任意の精度を持つ2 つの整数です。言語によっては、分母n が0 以外に制限され、2 つの数値が簡約形式 (1 以外の公約数なし) で保持される場合があります。
有理数データ型をサポートする言語は、通常、そのような値を構築するための特別な構文を提供し、また、基本的な算術演算 ('+'、'-'、'×'、'/'、整数の累乗) と比較 ('='、'<'、'>'、'≤') を拡張して、ネイティブに、または言語が提供する演算子オーバーロード機能を通じて、それらの値に対して機能します。これらの演算は、コンパイラによって、一連の整数マシン命令、またはライブラリ呼び出しに変換される場合があります。サポートは、書式設定、整数または浮動小数点値への丸めなど、他の演算にまで拡張される場合もあります。数学と同様に、これらの言語では、整数値が単位分母を持つ有理数と同等であると解釈されることがよくあります。
言語サポート
組み込みまたはコアライブラリ:
- C++ では、2011 年の改訂版以降、標準ライブラリの <ratio> ヘッダーの内容の形で、コンパイル時の有理数演算のサポートが組み込まれています。
- Clojure は有理数に対して演算を実行でき、有理数を表すリテラル形式を提供します。
- Go は標準ライブラリの math/big パッケージで有理数を提供します。
- J は基本言語で有理数を提供します。たとえば、
1r3は 3 分の 1 です。J の有理数は分子と分母の両方に任意精度の12683021339465478347804472r7322545784478161858100577整数を使用し、任意精度の非整数を許可します。たとえば、は3 から 50 桁の 10 進数の平方根を表します。[1] - Juliaは有理数演算子 を用いて有理数を提供します
//。例えば、 です。[2]6//9 == 2//3 && typeof(-4//9) == Rational{Int64} - Haskellは型を提供しますが、これは実際には(任意の分子と分母の型に対して有理数を実装する多態的な型)
Rationalの別名です。分数は%演算子を使用して構築されます。[3]Ratio IntegerRatioIntegral - OCamlの Num ライブラリは、任意精度の有理数を実装します。
- Perl :
Math::BigRatコア モジュールは任意精度の有理数を実装します。bigratプラグマを使用して、透過的な BigRat サポートをオンにすることができます。 - Raku : デフォルトで
Rat[4]型(精度が制限された有理数)を使用します。FatRat[5]データ型は任意精度の有理数を実装します。 - Python :標準ライブラリに
Fractionはモジュール内にクラスが含まれていますfractions。[6] - Ruby : 特殊な構文を使用したネイティブ サポート。
- Smalltalk は、 およびが任意のサイズの整数である
Fraction形式のクラスを使用して有理数を表します。分数に算術演算、、、を適用すると、約分された分数が返されます。p/qpq*+-/
外部ライブラリを使用する場合:
- CおよびC++には、 GNU Multiple Precision Arithmetic Libraryのようなプロジェクトがあります。
- Apache Commons Math ライブラリは、そのクラスを使用してJavaに有理数を提供します
Fraction。
コモンリスプ
Common Lispは任意のサイズの有理数を表す数値データ型RATIOを提供しています。[7]
1/3
⇒ 1/3
有理数の型は次のとおりですRATIO。
( 1/3型) ⇒比率
2 つの整数を割ると有理数が返され、有理数の乗算では整数が返される場合があります。
( / 6 8 ) ⇒ 3/4 ( * 3/4 16 ) ⇒ 12
分子と分母は、有理数を標準形に簡約し、その形式の分子または分母をそれぞれ計算する同名関数を使用して取得できます。[8]
(分子12/16 ) ⇒ 3 (分母12/16 ) ⇒ 4
大きな整数を計算して大きな有理数を返す:
( / ( 1- (実験2 200 )) ( 1- (実験2 43 ))) ⇒ 1606938044258990275541962092341162602522202993782792835301375/8796093022207
クロージュア
(印刷 (+ 1/10 2/10)) ⇒ 3/10
ジュリア
ジュリア> 1 // 10 + 2 // 10 3//10
ハスケル
モジュールData.Ratio
(1 % 10) + (2 % 10) ⇒ 3 % 10
ラケット(PLTスキーム)
> ( + 1/10 2/10 ) 3/10
楽
Raku はRatデフォルトでタイプ
を提供します。
my $v = 0.2 ;
「{$v} は {$v.^name} であり、分子は {$v.numerator}、分母は {$v.denominator} です」とします 。
# ⇒ 0.2 は Rat であり、分子は 1、分母は 5 です
0.1 + 0.2
# ⇒ 0.3とします
0.1 + 0.2 - 0.3とします。fmt ( " % .17f" )
# ⇒ 0.000000000000000000
1 / ( 0.1 + 0.2 - 0.3 )
#とします。 ⇒ Rational を Str に強制変換するときにゼロ除算を試みます。
ルビー
2.1 以降で特別な構文を使用する:
irb(main):001:0> 1 / 10 r + 2 / 10 r 3/10 => nil を置く
参考文献
- ^ 「Vocabulary/NumericPrecisions - J Wiki」.
- ^ 「複素数と有理数 — Julia 言語開発ドキュメント」。docs.julialang.org。2012年 7 月 15 日時点のオリジナルよりアーカイブ。
- ^ 「Haskell 98 ライブラリ レポート: 有理数」。
- ^ 「クラスラット」。
- ^ 「クラス FatRat」。
- ^ 「分数 — 有理数 — Python 3.10.0 ドキュメント」。
- ^ Common Lisp ハイパースペック: RATIO
- ^ Common Lisp HyperSpecの関数 NUMERATOR、DENOMINATOR
- ドナルド・クヌース『コンピュータプログラミングの芸術』第 2 巻。Addison-Wesley。
