CodeGeneration[C] - Maple コードの C コードへの変換
|
パラメータ
|
|
x
|
-
|
式、リスト、rtable、プロシージャ、またはモジュール
|
cgopts
|
-
|
(オプション) 1 つまたは複数の CodeGeneration のオプション
|
|
|
|
|
説明
|
|
•
|
C コマンドは Maple コードを ANSI C コードに変換します。
|
|
- パラメータ x が代数式の場合、その数式を変数に割り当てる C 文が生成されます。
|
|
- x が代数値のリスト、rtable、または Maple 配列の場合、要素を C 配列に割り当てる C 文の式列が生成されます。rtable または Maple 配列の場合、初期化されている要素のみが変換されます。
|
|
- x がプロシージャの場合、ライブラリの包含を行うのに必要な指示とともに、C 関数が生成されます。
|
|
- x がモジュールの場合、モジュールメンバーは CDetails ヘルプページの記載に従って変換されます。
|
|
|
例
|
|
以下の例で使用しているオプションについては、CodeGenerationOptions をご覧ください。
単純な数式を変換し、目的のコード内の名前 ``w'' に割り当てます。
>
|
C(x+y*z-2*x*z, resultname="w");
|
w = x + y * z - 2 * x * z;
| |
リストを変換し、目的のコード内にある ``w'' という名前の配列に割り当てます。
>
|
C([[x, 2*y], [5, z]], resultname="w");
|
w[0][0] = x;
w[0][1] = 2 * y;
w[1][0] = 5;
w[1][1] = z;
| |
計算式の列を変換します。最初に入力を最適化します。
>
|
cs := [s=1.0+x, t=ln(s)*exp(-x), r=exp(-x)+x*t]:
|
s = 0.10e1 + x;
t1 = log(s);
t2 = exp(-x);
t = t1 * t2;
r = t2 + x * t;
| |
x が浮動小数点数、y が整数であることを宣言します。結果が文字列内に返されます。
>
|
s := C(x+y+1, declare=[x::float, y::integer], output=string);
|
| (1) |
プロシージャを変換します。型が指定されていない変数はすべて integer であると仮定します。
>
|
f := proc(x, y, z) return x*y-y*z+x*z; end proc:
|
>
|
C(f, defaulttype=integer);
|
int f (int x, int y, int z)
{
return(x * y - y * z + x * z);
}
| |
間接的な戻り値を含むプロシージャを変換します。戻り値を格納するための新しい変数が作成されます。
>
|
f := proc(n)
local x, i;
x := 0.0;
for i to n do
x := x + i;
end do;
end proc:
|
double f (int n)
{
double x;
int i;
double cgret;
x = 0.0e0;
for (i = 1; i <= n; i++)
{
x = x + (double) i;
cgret = x;
}
return(cgret);
}
| |
配列をパラメータとして受け入れているプロシージャを変換します。C の配列がインデックス 0 から始まるように、インデックスの番号が付けなおされることに注意してください。
>
|
f := proc(x::Array(numeric, 5..7))
return x[5]+x[6]+x[7];
end proc:
|
double f (double x[3])
{
return(x[0] + x[1] + x[2]);
}
| |
エクスポートするプロシージャとローカルのプロシージャを 1 つずつ持つモジュールを変換します。
>
|
m := module() export p; local q;
p := proc(x,y) if y>0 then trunc(x); else ceil(x); end if; end proc:
q := proc(x) sin(x)^2; end proc:
end module:
|
#include <math.h>
double q;
double p (double x, int y);
double q (double x)
{
return(pow(sin(x), 0.2e1));
}
double p (double x, int y)
{
if (0 < y)
return((double) (int)(x));
else
return(ceil(x));
}
| |
max 関数を含む式を変換します。
cg0 = (x * x >= 1 / abs(x) ? x * x : 1 / abs(x));
| |
|
|
Download Help Document
Was this information helpful?