Japanese English

Math ライブラリ


概要

VCSSL Math ライブラリ は、数学関数を提供するための標準ライブラリです。
具体的には、指数関数、対数関数、平方根と累乗根、階乗、三角関数、逆三角関数、双曲線関数、逆双曲線関数、絶対値と最大最小値関数などが挙げられます。

このライブラリでは、64bit-float (いわゆるdouble) 精度と多倍長精度の数学関数が提供されます。前者は float 型、後者は varfloat 型として扱います。
VCSSLにおける float 型は double 型と区別されず、共に処理系によって定義される精度を持ち、現在の公式実装では IEEE754 の 64-bit float となっています。
varfloat 型については、現在の公式実装では統一規格では無く、10進 任意精度の独自仕様が採用されてます。丸めは10進における切り捨てによって処理されます。
varfloat型の詳細仕様は処理系依存であり、将来的には何らかの統一規格に変更される可能性があります。

float (double) 実装の数学関数については、処理系側の組み込みの機能が使用され、実行時に特殊な演算命令の一種に展開されて扱われます。
Math ライブラリが提供する float 実装の数学関数の多くは、そういった特殊な演算命令をラッピングした関数マクロです。
そのため、関数コールのオーバーヘッドが無く、概ね良好なパフォーマンスを発揮します。

それに対して varfloat (多倍長) 実装の数学関数については、VCSSL のコードとして実装されています。
具体的には、マクローリン展開やテイラー展開、ニュートン法、ガウス=ルジャンドル法などによって、値を求める計算アルゴリズムが、全て VCSSL で varfloat 型を用いて実装されています。
このため、処理速度は一般に低速の部類に入ります。これは、スクリプト言語による実装である事や、そもそも varfloat 型の演算速度が低速である事などに起因します。
具体的な例として、sin(1) の値を有効桁数 1000 桁で計算するコードは以下のようになります。この計算では sin 関数に 1 秒弱の処理時間を要します。

digit( 1000 ); // 有効桁数を 1000 桁に設定
varfloat value = sin( 1.0vf ); // sin 関数を計算
print( value ); // 出力

varfloat (多倍長) 実装の数学関数では、多くが収束アルゴリズムに依存しているため、末尾の、ある程度の桁数に誤差蓄積が生じる場合があります。
この事を見越して、数学関数の内部では、数割程度(関数によって異なります)大きい桁数で計算し、値を返す時点で余剰桁を切り捨てるようになっています。
ただし、これはあくまで補助的なものであり、あらゆる有効桁数と引数に対して、常に誤差蓄積の桁が排除される事を保証するものではありません。
関数にもよりますが、誤差蓄積の検証は、一般に数十桁程度の有効桁数による用途と、常用的な範囲の引数を想定して行われています。
数千から数万桁の用途や、特異点近傍の引数については、一般に誤差蓄積が大きくなるため、切り捨てる余剰桁に収まらず、関数の戻り値の末尾にも現れる場合があります。
従って、そうした用途では、呼び出し側でも誤差蓄積を考慮した大きめの有効桁数で使用し、余剰桁を切り捨てるなどの措置を行ってください。


目次

const float PI
float精度における、円周率の値です。多倍長精度の varfloat 値を得るには pi() を使用してください。
const float E
float精度における、ネイピア数(自然対数の底)の値です。多倍長精度の varfloat 値を得るには exp( 1.0vf ) で計算してください。
macro nan( float arg )
float値が NaN かどうか判定します。
macro inf( float arg )
float値が Inf かどうか判定します。
macro and( int number1, int number2 )
int値に対して、ビットごとのAND(論理積)演算を計算します。
macro or( int number1, int number2 )
int値に対して、ビットごとのOR(論理和)演算を計算します。
macro xor( int number1, int number2 )
int値に対して、ビットごとのXOR(排他的論理和)演算を計算します。
macro random()
0.0以上1.0未満の値を返します。なお、VCSSL3.0.20以前のドキュメントにおいて「0.0 から 1.0 までの乱数値を返します。」と記載されていましたが、この表現は曖昧であり、実際には1.0に完全に一致する値が返される事はありません。
macro rand()
randomと同様です。現在はrandomの使用が推奨されます。この関数の名称は、整数型の乱数と混同を招くため、現在の使用は推奨されません。将来的に、この関数の型の変更が検討される可能性があります。
varfloat pi()
円周率の値を計算します。内部では、元の桁数の1.1倍の桁数で、ガウス=ルジャンドル法によって計算されます。高精度な円周率の値は、周期性がある関数の計算や、周期境界をもつシミュレーション(回転系や写像系など)において、引数や座標の円周率による剰余を求めるために必要となります。実際に Math ライブラリでも、varfloat型の三角関数を求める計算などで使用されています。
macro exp( float arg )
ネイピア数を低とする指数関数を計算します。
varfloat exp( varfloat arg )
ネイピア数を低とする指数関数を計算します。内部では、元の桁数の 1.34 倍の桁数で、マクローリン展開によって計算されます。ただし 10 桁以下では、元の桁数 + 4桁 で計算されます。この余剰桁数は、将来的に( 恐らくより高精度な方向に )変更される可能性があります。
macro pow( float arg1, float arg2 )
指数関数を計算します。
varfloat pow( varfloat arg1, varint arg2 )
指数が整数の指数関数を計算します。内部では、「 元の桁数 + 指数 ( arg2 ) のオーダーの絶対値 」の2.1倍の桁数で、乗算の繰り返しによって計算されます。ただし 10 桁以下では、元の桁数 + 4桁 で計算されます。この余剰桁数は、将来的に( 恐らくより高精度な方向に )変更される可能性があります。
varfloat pow( varfloat arg1, varfloat arg2 )
指数が浮動小数点数(実数)の指数関数を計算します。内部では、「 元の桁数 + 指数 ( arg2 ) のオーダーの絶対値 」の1.2倍の桁数で、 + マクローリン展開もしくは指数関数と対数関数の組み合わせによって計算されます。ただし 10 桁以下では、元の桁数 + 4桁 で計算されます。この余剰桁数は、将来的に( 恐らくより高精度な方向に )変更される可能性があります。
varfloat pow( varint arg1, varfloat arg2 )
指数関数を計算します。内部では、arg1 を varfloat 型にキャストした上で、 pow( varfloat, varfloat ) が使用されます。
macro ln( float arg )
自然対数を計算します。log と同じです。
macro ln( varfloat arg )
自然対数を計算します。log と同じです。内部ではそのまま log(varfloat) が使用されています。
macro log( float arg )
自然対数を計算します。ln と同じです。
varfloat log( varfloat arg )
自然対数を計算します。ln と同じです。内部では、元の桁数の1.34倍の桁数で、「 1以上の引数ではニュートン法、1以下の引数ではテイラー展開 」によって計算されます。ただし 10 桁以下では、元の桁数 + 4桁 で計算されます。この余剰桁数は、将来的に( 恐らくより高精度な方向に )変更される可能性があります。
macro log10( float arg )
常用対数を計算します。
varfloat log10( varfloat arg )
常用対数を計算します。内部では、元の桁数の2.2倍の桁数で、「 log10(x) = ln(x) / ln(10) 」によって計算されます。ただし 10 桁以下では、元の桁数 + 4桁 で計算されます。この余剰桁数は、将来的に( 恐らくより高精度な方向に )変更される可能性があります。
macro sqrt( float arg )
平方根を計算します。
varfloat sqrt( varfloat arg )
平方根を計算します。内部では、元の桁数の1.34倍の桁数で、ニュートン法によって計算されます。ただし 10 桁以下では、元の桁数 + 4桁 で計算されます。この余剰桁数は、将来的に( 恐らくより高精度な方向に )変更される可能性があります。
macro root( float arg, int rootPower )
N乗根を計算します。
varfloat root( varfloat arg, varint p )
N乗根を計算します。内部では、元の桁数の1.34倍の桁数で、ニュートン法によって計算されます。ただし 10 桁以下では、元の桁数 + 4桁 で計算されます。この余剰桁数は、将来的に( 恐らくより高精度な方向に )変更される可能性があります。
varfloat root( varfloat arg, varfloat vfp )
N乗根を計算します。内部では、元の桁数の1.34倍の桁数で、ニュートン法によって計算されます。ただし 10 桁以下では、元の桁数 + 4桁 で計算されます。この余剰桁数は、将来的に( 恐らくより高精度な方向に )変更される可能性があります。なお、この関数の第二引数は、常に整数であると見なされます。この関数は、電卓ソフトなどで数値リテラルが浮動小数点数と見なされるモードにおける、利便性確保のためだけにサポートされています。通常の利用シーンでは使用する利点は特に無いため、root( varfloat, varint ) を使用してください。
macro abs( float arg )
絶対値を計算します。
macro abs( int arg )
絶対値を計算します。
varfloat abs( varfloat arg )
絶対値を計算します。
varint abs( varint arg )
絶対値を計算します。
macro max( float arg1, float arg2 )
2つの引数の内、大きい方を返します。
macro max( int arg1, int arg2 )
2つの引数の内、大きい方を返します。
varfloat max( varfloat arg1, varfloat arg2 )
2つの引数の内、大きい方を返します。
varint max( varint arg1, varint arg2 )
2つの引数の内、大きい方を返します。
macro min( float arg1, float arg2 )
2つの引数の内、小さい方を返します。
macro min( int arg1, int arg2 )
2つの引数の内、小さい方を返します。
varfloat min( varfloat arg1, varfloat arg2 )
2つの引数の内、小さい方を返します。
varint min( varint arg1, varint arg2 )
2つの引数の内、小さい方を返します。
float fac( float arg )
階乗を計算します。この関数は引数・戻り値共に float ですが、内部で近い int に丸めて計算されます。変換に伴い、誤差が精度に影響する可能性があります。厳密性を要求する場合は int 引数のものを使用してください。
macro fac( int arg )
階乗を計算します。
varint fac( varint arg )
階乗を計算します。
varfloat fac( varfloat arg )
階乗を計算します。
macro sin( float arg )
サイン(正弦)関数を計算します。
varfloat sin( varfloat arg )
サイン(正弦)関数を計算します。内部では、「 元の桁数の1.34倍 + 引数のオーダーの10倍 」の桁数で、マクローリン展開によって計算されます。ただし 10 桁以下では、「 元の桁数 + 4桁 + 引数のオーダーの10倍 」の桁数で計算されます。この余剰桁数は、将来的に( 恐らくより高精度な方向に )変更される可能性があります。0 ~ π/2 の範囲以外の引数に対しては、三角関数の対称性と周期性を利用し、内部では 0 ~ π の範囲の値を使用して計算されます。
macro cos( float arg )
コサイン(余弦)関数を計算します。
varfloat cos( varfloat arg )
コサイン(余弦)関数を計算します。内部では、「 元の桁数の1.34倍 + 引数のオーダーの10倍 」の桁数で、マクローリン展開によって計算されます。ただし 10 桁以下では、「 元の桁数 + 4桁 + 引数のオーダーの10倍 」の桁数で計算されます。この余剰桁数は、将来的に( 恐らくより高精度な方向に )変更される可能性があります。0 ~ π/2 の範囲以外の引数に対しては、三角関数の対称性と周期性を利用し、内部では 0 ~ π の範囲の値を使用して計算されます。
macro tan( float arg )
タンジェント(正接)関数を計算します。
varfloat tan( varfloat arg )
タンジェント(正接)関数を計算します。内部では、元の桁数の2.1倍の桁数で、「 tan(x) = sin(x) / cos(x) 」によって計算されます。ただし 10 桁以下では、「 元の桁数 + 4桁 」の桁数で計算されます。この余剰桁数は、将来的に( 恐らくより高精度な方向に )変更される可能性があります。
macro asin( float arg )
アークサイン関数(サインの逆関数)を計算します。
varfloat asin( varfloat arg )
アークサイン関数(サインの逆関数)を計算します。内部では、元の桁数の1.34倍の桁数で、「 絶対値が0.7以下の引数についてはマクローリン展開、それより外側はニュートン法 」によって計算されます。ただし 10 桁以下では、「 元の桁数 + 4桁 」の桁数で計算されます。この余剰桁数は、将来的に( 恐らくより高精度な方向に )変更される可能性があります。
macro acos( float arg )
アークコサイン関数(コサインの逆関数)を計算します。
varfloat acos( varfloat arg )
アークコサイン関数(コサインの逆関数)を計算します。内部では、元の桁数の1.34倍の桁数で、「 acos(x) = π/2 - asin(x) 」によって計算されます。ただし 10 桁以下では、「 元の桁数 + 4桁 」の桁数で計算されます。この余剰桁数は、将来的に( 恐らくより高精度な方向に )変更される可能性があります。
macro atan( float arg )
アークタンジェント関数(タンジェントの逆関数)を計算します。
varfloat atan( varfloat arg )
アークタンジェント関数(タンジェントの逆関数)を計算します。内部では、元の桁数の1.34倍の桁数で、「 絶対値が0.7以下の引数についてはマクローリン展開、それより外側はニュートン法 」によって計算されます。ただし 10 桁以下では、「 元の桁数 + 4桁 」の桁数で計算されます。この余剰桁数は、将来的に( 恐らくより高精度な方向に )変更される可能性があります。
macro sinh( float arg )
ハイパボリックサイン関数を計算します。
varfloat sinh( varfloat arg )
ハイパボリックサイン関数を計算します。内部では、元の桁数の2.1倍の桁数で、「 sinh(x) = ( exp(x) - exp(-x) ) / 2 」によって計算されます。ただし 10 桁以下では、「 元の桁数 + 4桁 」の桁数で計算されます。この余剰桁数は、将来的に( 恐らくより高精度な方向に )変更される可能性があります。
macro cosh( float arg )
ハイパボリックコサイン関数を計算します。
varfloat cosh( varfloat arg )
ハイパボリックコサイン関数を計算します。内部では、元の桁数の2.1倍の桁数で、「 sinh(x) = ( exp(x) + exp(-x) ) / 2 」によって計算されます。ただし 10 桁以下では、「 元の桁数 + 4桁 」の桁数で計算されます。この余剰桁数は、将来的に( 恐らくより高精度な方向に )変更される可能性があります。
macro tanh( float arg )
ハイパボリックタンジェント関数を計算します。
varfloat tanh( varfloat arg )
ハイパボリックタンジェント関数を計算します。内部では、元の桁数の2.8倍の桁数で、「 sinh(x) = ( exp(x) - exp(-x) ) / ( exp(x) + exp(-x) ) 」によって計算されます。ただし 10 桁以下では、「 元の桁数 + 4桁 」の桁数で計算されます。この余剰桁数は、将来的に( 恐らくより高精度な方向に )変更される可能性があります。
macro asinh( float arg )
ハイパボリックサインの逆関数を計算します。
varfloat asinh( varfloat arg )
ハイパボリックサインの逆関数を計算します。内部では、元の桁数の2.1倍の桁数で、「 asinh(x) = ln( x + √( x*x + 1 ) ) 」によって計算されます。ただし 10 桁以下では、「 元の桁数 + 4桁 」の桁数で計算されます。この余剰桁数は、将来的に( 恐らくより高精度な方向に )変更される可能性があります。
macro acosh( float arg )
ハイパボリックコサインの逆関数を計算します。
varfloat acosh( varfloat arg )
ハイパボリックコサインの逆関数を計算します。内部では、元の桁数の2.1倍の桁数で、「 acosh(x) = ln( x + √( x*x - 1 ) ) 」によって計算されます。ただし 10 桁以下では、「 元の桁数 + 4桁 」の桁数で計算されます。この余剰桁数は、将来的に( 恐らくより高精度な方向に )変更される可能性があります。
macro atanh( float arg )
ハイパボリックタンジェントの逆関数を計算します。
varfloat atanh( varfloat arg )
ハイパボリックタンジェントの逆関数を計算します。内部では、元の桁数の2.1倍の桁数で、「 絶対値が0.9以下の引数については atanh(x) = 1/2 * log(1+x)/log(1-x) 」によって、それより外側はニュートン法によって計算されます。ただし 10 桁以下では、「 元の桁数 + 4桁 」の桁数で計算されます。この余剰桁数は、将来的に( 恐らくより高精度な方向に )変更される可能性があります。関数の対称性を利用し、負の引数については、正の引数における値を利用して計算されます。古いバージョンでは、-0.7 以下(負の無限大側)の引数について値を求められません。計算が終わらないか、0 が返されます。この問題は VCSSL 3.3.2 において修正されました。
macro deg( float rad )
角度の単位変換です。弧度法(ラジアン)の角度を、度数法の角度に変換します。
varfloat deg(varfloat rad)
角度の単位変換です。弧度法(ラジアン)の角度を、度数法の角度に変換します。内部では、元の桁数の1.34倍の桁数で、「 ラジアン数 = 度数 * π / 180 」によって計算されます。
macro rad( float deg )
角度の単位変換です。度数法の角度を、弧度法(ラジアン)の角度に変換します。
varfloat rad(varfloat deg)
角度の単位変換です。度数法の角度を、弧度法(ラジアン)の角度に変換します。内部では、元の桁数の1.34倍の桁数で、「 度数 = ラジアン数 * 180 / π 」によって計算されます。

構造体

- なし -


変数

変数名 PI
宣言形式 const float PI
説明 float精度における、円周率の値です。多倍長精度の varfloat 値を得るには pi() を使用してください。
変数名 E
宣言形式 const float E
説明 float精度における、ネイピア数(自然対数の底)の値です。多倍長精度の varfloat 値を得るには exp( 1.0vf ) で計算してください。

関数

関数名 nan
宣言形式 macro nan( float arg )
説明 float値が NaN かどうか判定します。
引数 (float型) arg : 判定対象の値。
戻り値 (bool型) NaN であれば true 、そうでなければ false 。
使用例 float x = 0.0/0.0;
bool isNaN = nan(x);
print("isNaN=" + isNaN);
関数名 inf
宣言形式 macro inf( float arg )
説明 float値が Inf かどうか判定します。
引数 (float型) arg : 判定対象の値。
戻り値 (bool型) Inf であれば true 、そうでなければ false 。
使用例 float x = 1.0/0.0;
bool isInf = inf(x);
print("isInf=" + isInf);
関数名 and
宣言形式 macro and( int number1, int number2 )
説明 int値に対して、ビットごとのAND(論理積)演算を計算します。
引数 (int型) number1 : 演算対象の値
(int型) number2 : 演算対象の値
(int) : 計算結果の値
使用例 int a = 0b01010101;
int b = 0b11110000;
int c = and(a, b);
print( bin(c) ); // 0b1010000
関数名 or
宣言形式 macro or( int number1, int number2 )
説明 int値に対して、ビットごとのOR(論理和)演算を計算します。
引数 (int型) number1 : 演算対象の値
(int型) number2 : 演算対象の値
(int) : 計算結果の値
使用例 int a = 0b01010101;
int b = 0b11110000;
int c = or(a, b);
print( bin(c) ); // 0b11110101
関数名 xor
宣言形式 macro xor( int number1, int number2 )
説明 int値に対して、ビットごとのXOR(排他的論理和)演算を計算します。
引数 (int型) number1 : 演算対象の値
(int型) number2 : 演算対象の値
(int) : 計算結果の値
使用例 int a = 0b01010101;
int b = 0b11110000;
int c = xor(a, b);
print( bin(c) ); // 0b10100101
関数名 random
宣言形式 macro random()
説明 0.0以上1.0未満の値を返します。なお、VCSSL3.0.20以前のドキュメントにおいて「0.0 から 1.0 までの乱数値を返します。」と記載されていましたが、この表現は曖昧であり、実際には1.0に完全に一致する値が返される事はありません。
戻り値 (float型) 乱数値
使用例 float v = random();
print(v); // 0.367283... (random)
関数名 rand
宣言形式 macro rand()
説明 randomと同様です。現在はrandomの使用が推奨されます。この関数の名称は、整数型の乱数と混同を招くため、現在の使用は推奨されません。将来的に、この関数の型の変更が検討される可能性があります。
戻り値 (float型) 乱数値
関数名 pi
宣言形式 varfloat pi()
説明 円周率の値を計算します。
内部では、元の桁数の1.1倍の桁数で、ガウス=ルジャンドル法によって計算されます。
高精度な円周率の値は、周期性がある関数の計算や、周期境界をもつシミュレーション(回転系や写像系など)において、引数や座標の円周率による剰余を求めるために必要となります。実際に Math ライブラリでも、varfloat型の三角関数を求める計算などで使用されています。
戻り値 (varfloat型) 円周率の値。
使用例 digit(100);
varfloat pi = pi();
print(pi); // 3.14...
関数名 exp
宣言形式 macro exp( float arg )
説明 ネイピア数を低とする指数関数を計算します。
引数 (float型) arg : 計算対象の値。
戻り値 (float型) 計算結果の値。
使用例 float e = exp(1.0);
print(e); // 2.71...
関数名 exp
宣言形式 varfloat exp( varfloat arg )
説明 ネイピア数を低とする指数関数を計算します。
内部では、元の桁数の 1.34 倍の桁数で、マクローリン展開によって計算されます。ただし 10 桁以下では、元の桁数 + 4桁 で計算されます。この余剰桁数は、将来的に( 恐らくより高精度な方向に )変更される可能性があります。
引数 (varfloat型) arg : 計算対象の値。
戻り値 (varfloat型) 計算結果の値。
使用例 digit(50);
varfloat e = exp(1.0vf);
print(e); // 2.71...
関数名 pow
宣言形式 macro pow( float arg1, float arg2 )
説明 指数関数を計算します。
引数 (float型) arg1 : 低。
(float型) arg2 : 指数。
戻り値 (float型) 計算結果の値。
使用例 float f = pow(1.2, 3.4);
print(f); // 1.8587...
関数名 pow
宣言形式 varfloat pow( varfloat arg1, varint arg2 )
説明 指数が整数の指数関数を計算します。
内部では、「 元の桁数 + 指数 ( arg2 ) のオーダーの絶対値 」の2.1倍の桁数で、乗算の繰り返しによって計算されます。ただし 10 桁以下では、元の桁数 + 4桁 で計算されます。この余剰桁数は、将来的に( 恐らくより高精度な方向に )変更される可能性があります。
引数 (varfloat型) arg1 : 低。
(varint型) arg2 : 指数。
戻り値 (varfloat型) 計算結果の値。
関数名 pow
宣言形式 varfloat pow( varfloat arg1, varfloat arg2 )
説明 指数が浮動小数点数(実数)の指数関数を計算します。
内部では、「 元の桁数 + 指数 ( arg2 ) のオーダーの絶対値 」の1.2倍の桁数で、 + マクローリン展開もしくは指数関数と対数関数の組み合わせによって計算されます。ただし 10 桁以下では、元の桁数 + 4桁 で計算されます。この余剰桁数は、将来的に( 恐らくより高精度な方向に )変更される可能性があります。
引数 (varfloat型) arg1 : 低。
(varfloat型) arg2 : 指数。
戻り値 (varfloat型) 計算結果の値。
使用例 digit(50);
varfloat v = pow(1.2vf, 3.4vf);
print(v); // 1.8587...
関数名 pow
宣言形式 varfloat pow( varint arg1, varfloat arg2 )
説明 指数関数を計算します。
内部では、arg1 を varfloat 型にキャストした上で、 pow( varfloat, varfloat ) が使用されます。
引数 (varint型) arg1 : 低。
(varfloat型) arg2 : 指数。
戻り値 (varfloat型) 計算結果の値。
関数名 ln
宣言形式 macro ln( float arg )
説明 自然対数を計算します。log と同じです。
引数 (float型) arg : 計算対象の値。
戻り値 (float型) 計算結果の値。
使用例 float f = ln(10.0);
print(f); // 2.302585...
関数名 ln
宣言形式 macro ln( varfloat arg )
説明 自然対数を計算します。log と同じです。
内部ではそのまま log(varfloat) が使用されています。
引数 (varfloat型) arg : 計算対象の値。
戻り値 (varfloat型) 計算結果の値。
使用例 digit(50);
varfloat v = ln(10.0vf);
print(v); // 2.302585...
関数名 log
宣言形式 macro log( float arg )
説明 自然対数を計算します。ln と同じです。
引数 (float型) arg : 計算対象の値。
戻り値 (float型) 計算結果の値。
使用例 float f = log(10.0);
print(f); // 2.302585...
関数名 log
宣言形式 varfloat log( varfloat arg )
説明 自然対数を計算します。ln と同じです。
内部では、元の桁数の1.34倍の桁数で、「 1以上の引数ではニュートン法、1以下の引数ではテイラー展開 」によって計算されます。ただし 10 桁以下では、元の桁数 + 4桁 で計算されます。この余剰桁数は、将来的に( 恐らくより高精度な方向に )変更される可能性があります。
引数 (varfloat型) arg : 計算対象の値。
戻り値 (varfloat型) 計算結果の値。
使用例 digit(50);
varfloat v = log(10.0vf);
print(v); // 2.302585...
関数名 log10
宣言形式 macro log10( float arg )
説明 常用対数を計算します。
引数 (float型) arg : 計算対象の値。
戻り値 (float型) 計算結果の値。
使用例 float f = log(10.0);
print(f); // 1.0
関数名 log10
宣言形式 varfloat log10( varfloat arg )
説明 常用対数を計算します。
内部では、元の桁数の2.2倍の桁数で、「 log10(x) = ln(x) / ln(10) 」によって計算されます。ただし 10 桁以下では、元の桁数 + 4桁 で計算されます。この余剰桁数は、将来的に( 恐らくより高精度な方向に )変更される可能性があります。
引数 (varfloat型) arg : 計算対象の値。
戻り値 (varfloat型) 計算結果の値。
使用例 digit(50);
varfloat v = log10(10.0vf);
print(v);
関数名 sqrt
宣言形式 macro sqrt( float arg )
説明 平方根を計算します。
引数 (float型) arg : 計算対象の値。
戻り値 (float型) 計算結果の値。
使用例 float f = sqrt(2.0);
print(f); // 1.4142...
関数名 sqrt
宣言形式 varfloat sqrt( varfloat arg )
説明 平方根を計算します。
内部では、元の桁数の1.34倍の桁数で、ニュートン法によって計算されます。ただし 10 桁以下では、元の桁数 + 4桁 で計算されます。この余剰桁数は、将来的に( 恐らくより高精度な方向に )変更される可能性があります。
引数 (varfloat型) arg : 計算対象の値。
戻り値 (varfloat型) 計算結果の値。
使用例 digit(50);
varfloat v = sqrt(2.0vf);
print(v); // 1.4142...
関数名 root
宣言形式 macro root( float arg, int rootPower )
説明 N乗根を計算します。
引数 (float型) arg : 計算対象の値。
(int型) rootPower : N乗根のN。
戻り値 (float型) 計算結果の値。
使用例 float f = root(2.0, 3);
print(f); // 1.259921...
関数名 root
宣言形式 varfloat root( varfloat arg, varint p )
説明 N乗根を計算します。
内部では、元の桁数の1.34倍の桁数で、ニュートン法によって計算されます。ただし 10 桁以下では、元の桁数 + 4桁 で計算されます。この余剰桁数は、将来的に( 恐らくより高精度な方向に )変更される可能性があります。
引数 (varfloat型) arg : 計算対象の値。
(varint型) p : N乗根のN。
戻り値 (varfloat型) 計算結果の値。
使用例 digit(50);
varfloat v = root(2.0vf,3v);
print(v); // 1.259921...
関数名 root
宣言形式 varfloat root( varfloat arg, varfloat vfp )
説明 N乗根を計算します。
内部では、元の桁数の1.34倍の桁数で、ニュートン法によって計算されます。ただし 10 桁以下では、元の桁数 + 4桁 で計算されます。この余剰桁数は、将来的に( 恐らくより高精度な方向に )変更される可能性があります。なお、この関数の第二引数は、常に整数であると見なされます。この関数は、電卓ソフトなどで数値リテラルが浮動小数点数と見なされるモードにおける、利便性確保のためだけにサポートされています。通常の利用シーンでは使用する利点は特に無いため、root( varfloat, varint ) を使用してください。
引数 (varfloat型) arg : 計算対象の値。
(varfloat型) vfp : N乗根のN。
戻り値 (varfloat型) 計算結果の値。
関数名 abs
宣言形式 macro abs( float arg )
説明 絶対値を計算します。
引数 (float型) arg : 計算対象の値。
戻り値 (float型) 計算結果の値。
使用例 float f = abs(-1.2);
print(f); // 1.2
関数名 abs
宣言形式 macro abs( int arg )
説明 絶対値を計算します。
引数 (int型) arg : 計算対象の値。
戻り値 (int型) 計算結果の値。
使用例 int i = abs(-123);
print(i); // 123
関数名 abs
宣言形式 varfloat abs( varfloat arg )
説明 絶対値を計算します。
引数 (varfloat型) arg : 計算対象の値。
戻り値 (varfloat型) 計算結果の値。
使用例 digit(50);
varfloat v = abs(-1.2vf);
print(v); // 1.2
関数名 abs
宣言形式 varint abs( varint arg )
説明 絶対値を計算します。
引数 (varint型) arg : 計算対象の値。
戻り値 (varint型) 計算結果の値。
使用例 digit(50);
varint v = abs(-123v);
print(v); // 123
関数名 max
宣言形式 macro max( float arg1, float arg2 )
説明 2つの引数の内、大きい方を返します。
引数 (float型) arg1 : 計算対象の値。
(float型) arg2 : 計算対象の値。
戻り値 (float型) 計算結果の値。
関数名 max
宣言形式 macro max( int arg1, int arg2 )
説明 2つの引数の内、大きい方を返します。
引数 (int型) arg1 : 計算対象の値。
(int型) arg2 : 計算対象の値。
戻り値 (int型) 計算結果の値。
関数名 max
宣言形式 varfloat max( varfloat arg1, varfloat arg2 )
説明 2つの引数の内、大きい方を返します。
引数 (varfloat型) arg1 : 計算対象の値。
(varfloat型) arg2 : 計算対象の値。
戻り値 (varfloat型) 計算結果の値。
関数名 max
宣言形式 varint max( varint arg1, varint arg2 )
説明 2つの引数の内、大きい方を返します。
引数 (varint型) arg1 : 計算対象の値。
(varint型) arg2 : 計算対象の値。
戻り値 (varint型) 計算結果の値。
関数名 min
宣言形式 macro min( float arg1, float arg2 )
説明 2つの引数の内、小さい方を返します。
引数 (float型) arg1 : 計算対象の値。
(float型) arg2 : 計算対象の値。
戻り値 (float型) 計算結果の値。
関数名 min
宣言形式 macro min( int arg1, int arg2 )
説明 2つの引数の内、小さい方を返します。
引数 (int型) arg1 : 計算対象の値。
(int型) arg2 : 計算対象の値。
戻り値 (int型) 計算結果の値。
関数名 min
宣言形式 varfloat min( varfloat arg1, varfloat arg2 )
説明 2つの引数の内、小さい方を返します。
引数 (varfloat型) arg1 : 計算対象の値。
(varfloat型) arg2 : 計算対象の値。
戻り値 (varfloat型) 計算結果の値。
関数名 min
宣言形式 varint min( varint arg1, varint arg2 )
説明 2つの引数の内、小さい方を返します。
引数 (varint型) arg1 : 計算対象の値。
(varint型) arg2 : 計算対象の値。
戻り値 (varint型) 計算結果の値。
関数名 fac
宣言形式 float fac( float arg )
説明 階乗を計算します。この関数は引数・戻り値共に float ですが、内部で近い int に丸めて計算されます。変換に伴い、誤差が精度に影響する可能性があります。厳密性を要求する場合は int 引数のものを使用してください。
引数 (float型) arg : 計算対象の値。
戻り値 (float型) (float) 計算結果の値。
関数名 fac
宣言形式 macro fac( int arg )
説明 階乗を計算します。
引数 (int型) arg : 計算対象の値。
戻り値 (int型) 計算結果の値。
関数名 fac
宣言形式 varint fac( varint arg )
説明 階乗を計算します。
引数 (varint型) arg : 計算対象の値。
戻り値 (varint型) 計算結果の値。
関数名 fac
宣言形式 varfloat fac( varfloat arg )
説明 階乗を計算します。
引数 (varfloat型) arg : 計算対象の値。
戻り値 (varfloat型) 計算結果の値。
関数名 sin
宣言形式 macro sin( float arg )
説明 サイン(正弦)関数を計算します。
引数 (float型) arg : 計算対象の値。
戻り値 (float型) 計算結果の値。
使用例 float f = sin(1.0);
print(f); // 0.84147...
関数名 sin
宣言形式 varfloat sin( varfloat arg )
説明 サイン(正弦)関数を計算します。
内部では、「 元の桁数の1.34倍 + 引数のオーダーの10倍 」の桁数で、マクローリン展開によって計算されます。ただし 10 桁以下では、「 元の桁数 + 4桁 + 引数のオーダーの10倍 」の桁数で計算されます。この余剰桁数は、将来的に( 恐らくより高精度な方向に )変更される可能性があります。
0 ~ π/2 の範囲以外の引数に対しては、三角関数の対称性と周期性を利用し、内部では 0 ~ π の範囲の値を使用して計算されます。
引数 (varfloat型) arg : 計算対象の値。
戻り値 (varfloat型) 計算結果の値。
使用例 digit(50);
varfloat v = sin(1.0vf);
print(v); // 0.84147...
関数名 cos
宣言形式 macro cos( float arg )
説明 コサイン(余弦)関数を計算します。
引数 (float型) arg : 計算対象の値。
戻り値 (float型) 計算結果の値。
使用例 float f = cos(1.0);
print(f); // 0.5403...
関数名 cos
宣言形式 varfloat cos( varfloat arg )
説明 コサイン(余弦)関数を計算します。
内部では、「 元の桁数の1.34倍 + 引数のオーダーの10倍 」の桁数で、マクローリン展開によって計算されます。ただし 10 桁以下では、「 元の桁数 + 4桁 + 引数のオーダーの10倍 」の桁数で計算されます。この余剰桁数は、将来的に( 恐らくより高精度な方向に )変更される可能性があります。
0 ~ π/2 の範囲以外の引数に対しては、三角関数の対称性と周期性を利用し、内部では 0 ~ π の範囲の値を使用して計算されます。
引数 (varfloat型) arg : 計算対象の値。
戻り値 (varfloat型) 計算結果の値。
使用例 digit(50);
varfloat v = cos(1.0vf);
print(v); // 0.5403...
関数名 tan
宣言形式 macro tan( float arg )
説明 タンジェント(正接)関数を計算します。
引数 (float型) arg : 計算対象の値。
戻り値 (float型) 計算結果の値。
使用例 float f = tan(1.0);
print(f); // 1.5574...
関数名 tan
宣言形式 varfloat tan( varfloat arg )
説明 タンジェント(正接)関数を計算します。
内部では、元の桁数の2.1倍の桁数で、「 tan(x) = sin(x) / cos(x) 」によって計算されます。ただし 10 桁以下では、「 元の桁数 + 4桁 」の桁数で計算されます。この余剰桁数は、将来的に( 恐らくより高精度な方向に )変更される可能性があります。
引数 (varfloat型) arg : 計算対象の値。
戻り値 (varfloat型) 計算結果の値。
使用例 digit(50);
varfloat v = tan(1.0vf);
print(v); // 1.5574...
関数名 asin
宣言形式 macro asin( float arg )
説明 アークサイン関数(サインの逆関数)を計算します。
引数 (float型) arg : 計算対象の値。
戻り値 (float型) 計算結果の値。
関数名 asin
宣言形式 varfloat asin( varfloat arg )
説明 アークサイン関数(サインの逆関数)を計算します。
内部では、元の桁数の1.34倍の桁数で、「 絶対値が0.7以下の引数についてはマクローリン展開、それより外側はニュートン法 」によって計算されます。ただし 10 桁以下では、「 元の桁数 + 4桁 」の桁数で計算されます。この余剰桁数は、将来的に( 恐らくより高精度な方向に )変更される可能性があります。
引数 (varfloat型) arg : 計算対象の値。
戻り値 (varfloat型) 計算結果の値。
関数名 acos
宣言形式 macro acos( float arg )
説明 アークコサイン関数(コサインの逆関数)を計算します。
引数 (float型) arg : 計算対象の値。
戻り値 (float型) 計算結果の値。
関数名 acos
宣言形式 varfloat acos( varfloat arg )
説明 アークコサイン関数(コサインの逆関数)を計算します。
内部では、元の桁数の1.34倍の桁数で、「 acos(x) = π/2 - asin(x) 」によって計算されます。ただし 10 桁以下では、「 元の桁数 + 4桁 」の桁数で計算されます。この余剰桁数は、将来的に( 恐らくより高精度な方向に )変更される可能性があります。
引数 (varfloat型) arg : 計算対象の値。
戻り値 (varfloat型) 計算結果の値。
関数名 atan
宣言形式 macro atan( float arg )
説明 アークタンジェント関数(タンジェントの逆関数)を計算します。
引数 (float型) arg : 計算対象の値。
戻り値 (float型) 計算結果の値。
関数名 atan
宣言形式 varfloat atan( varfloat arg )
説明 アークタンジェント関数(タンジェントの逆関数)を計算します。
内部では、元の桁数の1.34倍の桁数で、「 絶対値が0.7以下の引数についてはマクローリン展開、それより外側はニュートン法 」によって計算されます。ただし 10 桁以下では、「 元の桁数 + 4桁 」の桁数で計算されます。この余剰桁数は、将来的に( 恐らくより高精度な方向に )変更される可能性があります。
引数 (varfloat型) arg : 計算対象の値。
戻り値 (varfloat型) 計算結果の値。
関数名 sinh
宣言形式 macro sinh( float arg )
説明 ハイパボリックサイン関数を計算します。
引数 (float型) arg : 計算対象の値。
戻り値 (float型) 計算結果の値。
関数名 sinh
宣言形式 varfloat sinh( varfloat arg )
説明 ハイパボリックサイン関数を計算します。
内部では、元の桁数の2.1倍の桁数で、「 sinh(x) = ( exp(x) - exp(-x) ) / 2 」によって計算されます。ただし 10 桁以下では、「 元の桁数 + 4桁 」の桁数で計算されます。この余剰桁数は、将来的に( 恐らくより高精度な方向に )変更される可能性があります。
引数 (varfloat型) arg : 計算対象の値。
戻り値 (varfloat型) 計算結果の値。
関数名 cosh
宣言形式 macro cosh( float arg )
説明 ハイパボリックコサイン関数を計算します。
引数 (float型) arg : 計算対象の値。
戻り値 (float型) 計算結果の値。
関数名 cosh
宣言形式 varfloat cosh( varfloat arg )
説明 ハイパボリックコサイン関数を計算します。
内部では、元の桁数の2.1倍の桁数で、「 sinh(x) = ( exp(x) + exp(-x) ) / 2 」によって計算されます。ただし 10 桁以下では、「 元の桁数 + 4桁 」の桁数で計算されます。この余剰桁数は、将来的に( 恐らくより高精度な方向に )変更される可能性があります。
引数 (varfloat型) arg : 計算対象の値。
戻り値 (varfloat型) 計算結果の値。
関数名 tanh
宣言形式 macro tanh( float arg )
説明 ハイパボリックタンジェント関数を計算します。
引数 (float型) arg : 計算対象の値。
戻り値 (float型) 計算結果の値。
関数名 tanh
宣言形式 varfloat tanh( varfloat arg )
説明 ハイパボリックタンジェント関数を計算します。
内部では、元の桁数の2.8倍の桁数で、「 sinh(x) = ( exp(x) - exp(-x) ) / ( exp(x) + exp(-x) ) 」によって計算されます。ただし 10 桁以下では、「 元の桁数 + 4桁 」の桁数で計算されます。この余剰桁数は、将来的に( 恐らくより高精度な方向に )変更される可能性があります。
引数 (varfloat型) arg : 計算対象の値。
戻り値 (varfloat型) 計算結果の値。
関数名 asinh
宣言形式 macro asinh( float arg )
説明 ハイパボリックサインの逆関数を計算します。
引数 (float型) arg : 計算対象の値。
戻り値 (float型) 計算結果の値。
関数名 asinh
宣言形式 varfloat asinh( varfloat arg )
説明 ハイパボリックサインの逆関数を計算します。
内部では、元の桁数の2.1倍の桁数で、「 asinh(x) = ln( x + √( x*x + 1 ) ) 」によって計算されます。ただし 10 桁以下では、「 元の桁数 + 4桁 」の桁数で計算されます。この余剰桁数は、将来的に( 恐らくより高精度な方向に )変更される可能性があります。
引数 (varfloat型) arg : 計算対象の値。
戻り値 (varfloat型) 計算結果の値。
関数名 acosh
宣言形式 macro acosh( float arg )
説明 ハイパボリックコサインの逆関数を計算します。
引数 (float型) arg : 計算対象の値。
戻り値 (float型) 計算結果の値。
関数名 acosh
宣言形式 varfloat acosh( varfloat arg )
説明 ハイパボリックコサインの逆関数を計算します。
内部では、元の桁数の2.1倍の桁数で、「 acosh(x) = ln( x + √( x*x - 1 ) ) 」によって計算されます。ただし 10 桁以下では、「 元の桁数 + 4桁 」の桁数で計算されます。この余剰桁数は、将来的に( 恐らくより高精度な方向に )変更される可能性があります。
引数 (varfloat型) arg : 計算対象の値。
戻り値 (varfloat型) 計算結果の値。
関数名 atanh
宣言形式 macro atanh( float arg )
説明 ハイパボリックタンジェントの逆関数を計算します。
引数 (float型) arg : 計算対象の値。
戻り値 (float型) 計算結果の値。
関数名 atanh
宣言形式 varfloat atanh( varfloat arg )
説明 ハイパボリックタンジェントの逆関数を計算します。
内部では、元の桁数の2.1倍の桁数で、「 絶対値が0.9以下の引数については atanh(x) = 1/2 * log(1+x)/log(1-x) 」によって、それより外側はニュートン法によって計算されます。ただし 10 桁以下では、「 元の桁数 + 4桁 」の桁数で計算されます。この余剰桁数は、将来的に( 恐らくより高精度な方向に )変更される可能性があります。関数の対称性を利用し、負の引数については、正の引数における値を利用して計算されます。
古いバージョンでは、-0.7 以下(負の無限大側)の引数について値を求められません。計算が終わらないか、0 が返されます。この問題は VCSSL 3.3.2 において修正されました。
引数 (varfloat型) arg : 計算対象の値。
戻り値 (varfloat型) 計算結果の値。
関数名 deg
宣言形式 macro deg( float rad )
説明 角度の単位変換です。弧度法(ラジアン)の角度を、度数法の角度に変換します。
引数 (float型) rad : 弧度法(ラジアン)の角度。
戻り値 (float型) 度数法の角度。
使用例 float f = deg(PI);
print(f); // 180.0
関数名 deg
宣言形式 varfloat deg(varfloat rad)
説明 角度の単位変換です。弧度法(ラジアン)の角度を、度数法の角度に変換します。
内部では、元の桁数の1.34倍の桁数で、「 ラジアン数 = 度数 * π / 180 」によって計算されます。
引数 (varfloat型) rad : 弧度法(ラジアン)の角度。
戻り値 (varfloat型) 度数法の角度。
使用例 digit(50);
varfloat v = deg(pi());
print(v); // 179.999...9;
print( round(v, 40v, HALF_UP) ); // 180.0
関数名 rad
宣言形式 macro rad( float deg )
説明 角度の単位変換です。度数法の角度を、弧度法(ラジアン)の角度に変換します。
引数 (float型) deg : 度数法の角度。
戻り値 (float型) 弧度法(ラジアン)の角度。
使用例 float f = rad(180.0);
print(f); // 3.14...
関数名 rad
宣言形式 varfloat rad(varfloat deg)
説明 角度の単位変換です。度数法の角度を、弧度法(ラジアン)の角度に変換します。
内部では、元の桁数の1.34倍の桁数で、「 度数 = ラジアン数 * 180 / π 」によって計算されます。
引数 (varfloat型) deg : 度数法の角度。
戻り値 (varfloat型) 弧度法(ラジアン)の角度。
使用例 digit(50);
varfloat v = rad(180.0vf);
print(v); // 3.14...

Japanese English
この階層の目次
RINEARN からのお知らせ
※ VCSSL は RINEARN が開発しています。

ExevalatorのVer.2.4をリリース—MCPをサポートし、AI用の計算ツールとしても使用可能に
2025-11-15 - 式計算ライブラリExevalatorのVer.2.4をリリースしました。今回から、AIとやり取りするためのプロトコルである「MCP」をサポートし、AI用の計算ツールとしても使用可能になりました!

Exevalatorの最新版Ver.2.3をリリース、新たにPythonで使用可能に
2025-11-04 - 式計算ライブラリExevalatorのVer.2.3をリリースしました。今回から、新たにPython製のプログラムでも使用可能になりました!AI用ツール開発需要などの背景も踏まえて、詳細をお知らせします。

Exevalatorをアップデート、エラーメッセージの日本語化が手軽に
2025-10-31 - 式計算ライブラリExevalatorのVer.2.2.2をリリースしました。今回から、エラーメッセージを手軽に日本語化できるようになりました。数件のバグ修正&微調整も作んでいます。詳細をお知らせします。

関数電卓RINPn(りんぷん)オンライン版の内部構造を解説
2025-10-22 - 先日登場した、関数電卓ソフトRINPn(りんぷん)のオンライン版の内部構造を解説します。オープンソースなので、自由に改造・流用して、自分だけのWeb電卓を作る事も可能!(かもしれない)

関数電卓RINPn(りんぷん)、どこでもすぐ使えるオンライン版が登場!
2025-10-21 - フリー関数電卓ソフトRINPn(りんぷん)に、Web上でどこでもすぐ使える「オンライン版」が新登場しました!PCだけでなく、スマホでも利用可能です。詳細をお知らせします!

VCSSLのサポートAIが登場!ただし実用品質にはChatGPT有料アカウント(Plus)での利用推奨
2025-08-19 - プログラミング言語VCSSLについての質問対応や、コーディング作業を手伝ってくれるAIさんが登場しました!使用までの流れや推奨事項を解説し、実際の回答例や生成コード例などもたくさん紹介します!

各ソフトやVCSSLの英語版ドキュメント整備がほぼ完了
2025-06-30 - RINEARNでは2年前から、AIの補助による英語版ドキュメントの大幅拡充計画を進めてきました。今回、主要ドキュメント&コンテンツの英訳がほぼ完了し、一応の目標水準に達しました。詳細をお知らせします。

VCSSLの最新版をリリース:外部プログラムとの連携機能を少し強化、他
2025-05-25 - VCSSL3.4.52をリリースしました。外部プログラム(C言語製の実行ファイル等)との連携機能を少し強化し、文字化け対策やOS判別などを可能にしました。他にも細かい機能追加があります。詳細をお知らせします。

VCSSLの最新版をリリース、Java24上での非互換な挙動を対処
2025-04-22 - VCSSL3.4.50をリリースしました。Java24環境上でのネットワークドライブ関連のファイルパス解決で、従来環境とは異なる挙動が生じていたのを解消しました。詳細をお知らせします。

リニアングラフやVCSSLの最新版をリリース、目盛りの位置や内容を自由に指定可能に!
2024-11-24 - リニアングラフ3D/2Dを更新し、自由な位置に、自由な表記内容の目盛りを描けるようになりました!併せて、Java言語やVCSSLでの、プログラム制御用APIも拡張しています。詳細をお知らせします。