Previous: Introduction to Numbers, Up: Numbers   [Contents][Index]

5.1.2 Functions and Variables for Numbers

関数: bfloat (expr)

exprの中のすべての数や数の関数を多倍長浮動小数点に変換します。 戻り値の多倍長浮動小数点の有効桁数は、 グローバル変数fpprecによって規定されます。

float2bffalseの場合、 浮動小数点が多倍長浮動小数点に変換される時 (精度が落ちることを意味するので)警告メッセージが出力されます。

関数: bfloatp (expr)

もしexprが多倍長浮動小数点数ならtrueを、そうでなければfalseを返します。

オプション変数: bftorat

デフォルト値: false

bftoratは多倍長浮動小数点の有理数への変換を制御します。 bftoratfalseの時、 ratepsilonが変換を制御するのに使われます。 (これは比較的小さな有理数になります。) bftorattrueの時、 生成された有理数は多倍長浮動小数点を正確に表します。

オプション変数: bftrunc

デフォルト値: true

bftruncは、非ゼロの多倍長浮動小数点数の中のずるずる続くゼロを表示しないようにします。 例えば、もしbftruncfalseなら、 bfloat (1)1.000000000000000B0と表示されます。 そうでなければ、これは、1.0B0と表示されます。

関数: evenp (expr)

もしexprが偶数ならtrueを返します。 他の場合にはfalseを返します。

関数: float (expr)

exprの中の整数、有理数、多倍長浮動小数点を浮動小数点に変換します。 floatevflagでもあり、 非整数有理数と多倍長浮動小数点を浮動小数点に変換します。

オプション変数: float2bf

デフォルト値: true

float2bffalseの場合、 浮動小数点が多倍長浮動小数点に変換される時、 (これは精度の無駄使いとなるかもしれないので、) 警告メッセージが表示されます。 デフォルト値はtrueです。

関数: floatnump (expr)

もしexprが浮動小数点なら trueを返し、そうでないなら falseを返します。

オプション変数: fpprec

デフォルト値: 16

fpprecは多倍長浮動小数点上の代数のための有効桁数です。 fpprecは通常の浮動小数点上の計算に影響を与えません。

bfloatfpprintprecも参照してください。

オプション変数: fpprintprec

デフォルト値: 0

fpprintprecは、通常の浮動小数点もしくは多倍長浮動小数点を表示する時の 表示する桁数です。

通常の浮動小数点に関しては、 fpprintprecが2から16までの値を持つ時、 表示されるディジット数はfpprintprecに等しいです。 そうでなければ、fpprintprecは0もしくは16より大きく、 表示されるディジット数は16です。

多倍長浮動小数点に関しては、 fpprintprecが2からfpprecまでの値を持つ時、 表示される桁数は、fpprintprecに等しいです。 そうでなければ、fpprintprecは、0もしくはfpprecより大きく、 表示される桁数はfpprecに等しいです。

fpprintprecは1にはできません。

関数: integerp (expr)

もしexprが整数リテラルなら trueを、 そうでないなら falseを返します。

もし引数がシンボルならたとえ引数が宣言された整数でも、 integerpfalseを返します。

例:

(%i1) integerp (0);
(%o1)                         true
(%i2) integerp (1);
(%o2)                         true
(%i3) integerp (-17);
(%o3)                         true
(%i4) integerp (0.0);
(%o4)                         false
(%i5) integerp (1.0);
(%o5)                         false
(%i6) integerp (%pi);
(%o6)                         false
(%i7) integerp (n);
(%o7)                         false
(%i8) declare (n, integer);
(%o8)                         done
(%i9) integerp (n);
(%o9)                         false
オプション変数: m1pbranch

デフォルト値: false

m1pbranch-1のべき乗の主枝です。 (-1)^(1/3)(すなわち、「奇」の有理指数)や (-1)^(1/4)(すなわち、「偶」の有理指数) のような量は以下のように扱われます:

              domain:real
                            
(-1)^(1/3):      -1         
(-1)^(1/4):   (-1)^(1/4)   

             domain:complex              
m1pbranch:false          m1pbranch:true
(-1)^(1/3)               1/2+%i*sqrt(3)/2
(-1)^(1/4)              sqrt(2)/2+%i*sqrt(2)/2
関数: nonnegintegerp (n)

n >= 0かつ nが整数の時だけtrueを返します。

関数: numberp (expr)

もしexprが文字リテラルか、有理数か、浮動小数点数か、多倍長浮動小数点なら trueを、 そうでなければ falseを返します。

もし引数がシンボルなら、 たとえ引数が%pi%iのようなシンボリックな数でも、また、 even, odd, integer, rational, irrational, real, imaginary, complexのいずれかに宣言されていても、 numberpfalseを返します。

例:

(%i1) numberp (42);
(%o1)                         true
(%i2) numberp (-13/19);
(%o2)                         true
(%i3) numberp (3.14159);
(%o3)                         true
(%i4) numberp (-1729b-4);
(%o4)                         true
(%i5) map (numberp, [%e, %pi, %i, %phi, inf, minf]);
(%o5)      [false, false, false, false, false, false]
(%i6) declare (a, even, b, odd, c, integer, d, rational,
     e, irrational, f, real, g, imaginary, h, complex);
(%o6)                         done
(%i7) map (numberp, [a, b, c, d, e, f, g, h]);
(%o7) [false, false, false, false, false, false, false, false]
特殊シンボル: numer

numerは数値の引数を持つ(指数関数を含む)いくつかの数学関数を 浮動小数点に評価するようにします。 数値が与えられたexprの中の変数を値に置き換えるようにします。 それは floatスイッチをオンにもします。

%enumerも参照してください。

例:

(%i1) [sqrt(2), sin(1), 1/(1+sqrt(3))];
                                        1
(%o1)            [sqrt(2), sin(1), -----------]
                                   sqrt(3) + 1
(%i2) [sqrt(2), sin(1), 1/(1+sqrt(3))],numer;
(%o2) [1.414213562373095, .8414709848078965, .3660254037844387]
オプション変数: numer_pbranch

デフォルト値: false

オプション変数numer_pbranchは 負の整数、有理数、または浮動小数点数のべきの数値評価を制御します。 numer_pbranchtrueでかつ、指数が浮動小数点数であるか オプション変数numertrueの時、 Maximaは主枝を使って数値結果を評価します。 そうでなければ、式整理されたが未評価の結果が返されます。

例:

(%i1) (-2)^0.75;
(%o1) (-2)^0.75

(%i2) (-2)^0.75,numer_pbranch:true;
(%o2) 1.189207115002721*%i-1.189207115002721

(%i3) (-2)^(3/4);
(%o3) (-1)^(3/4)*2^(3/4)

(%i4) (-2)^(3/4),numer;
(%o4) 1.681792830507429*(-1)^0.75

(%i5) (-2)^(3/4),numer,numer_pbranch:true;
(%o5) 1.189207115002721*%i-1.189207115002721
関数: numerval (x_1, expr_1, …, x_n, expr_n)

変数x_1, …, x_nexpr_1, …, expr_nに等しい数値を持つ変数だと宣言します。 もし numerフラグが trueなら、 変数が現れる任意の式にて、数値は評価され、変数に代入されます。 evも参照してください。

expr_1, …, expr_nは、任意の式を取り得ます。数値である必要はありません。

関数: oddp (expr)

もしもexpが奇数であればtrueを返し、 それ以外ではfalseを返します。

オプション変数: ratepsilon

デフォルト値: 2.0e-8

ratepsilonは浮動小数点数を有理数に変換する際に使われる許容誤差です。

関数: rationalize (expr)

Maximaの式exprの中の倍精度浮動小数点やビッグフローすべてを同値の有理数に変換します。 もし浮動小数点の2値表現に詳しくなれば、rationalize (0.1)が1/10に等しくないことに 驚くかもしれません。 この振る舞いはMaximaに特別なわけではありません。―1/10は2値の循環小数表現を持ちます。

(%i1) rationalize (0.5);
                                1
(%o1)                           -
                                2
(%i2) rationalize (0.1);
                               1
(%o2)                          --
                               10
(%i3) fpprec : 5$
(%i4) rationalize (0.1b0);
                             209715
(%o4)                        -------
                             2097152
(%i5) fpprec : 20$
(%i6) rationalize (0.1b0);
                     236118324143482260685
(%o6)                ----------------------
                     2361183241434822606848
(%i7) rationalize (sin (0.1*x + 5.6));
                              x    28
(%o7)                     sin(-- + --)
                              10   5

使用例:

(%i1) unitfrac(r) := block([uf : [], q],
    if not(ratnump(r)) then
       error("The input to 'unitfrac' must be a rational number"),
    while r # 0 do (
        uf : cons(q : 1/ceiling(1/r), uf),
        r : r - q),
    reverse(uf))$
(%o1) unitfrac(r) := block([uf : [], q], 
if not ratnump(r) then
   error("The input to 'unitfrac' must be a rational number"),
                                  1
while r # 0 do (uf : cons(q : ----------, uf), r : r - q), 
                                      1
                              ceiling(-)
                                      r
reverse(uf))
(%i2) unitfrac (9/10);
                            1  1  1
(%o2)                      [-, -, --]
                            2  3  15
(%i3) apply ("+", %);
                               9
(%o3)                          --
                               10
(%i4) unitfrac (-9/10);
                                  1
(%o4)                       [- 1, --]
                                  10
(%i5) apply ("+", %);
                                9
(%o5)                         - --
                                10
(%i6) unitfrac (36/37);
                        1  1  1  1    1
(%o6)                  [-, -, -, --, ----]
                        2  3  8  69  6808
(%i7) apply ("+", %);
                               36
(%o7)                          --
                               37
関数: ratnump (expr)

もしexprが整数リテラルもしくは整数リテラルの比なら trueを返し、 そうでなければ falseを返します。


Previous: Introduction to Numbers, Up: Numbers   [Contents][Index]