Maple Professional
Maple Academic
Maple Student Edition
Maple Personal Edition
Maple Player
Maple Player for iPad
MapleSim Professional
MapleSim Academic
Maple T.A. - Testing & Assessment
Maple T.A. MAA Placement Test Suite
Möbius - Online Courseware
Machine Design / Industrial Automation
Aerospace
Vehicle Engineering
Robotics
Power Industries
System Simulation and Analysis
Model development for HIL
Plant Modeling for Control Design
Robotics/Motion Control/Mechatronics
Other Application Areas
Mathematics Education
Engineering Education
High Schools & Two-Year Colleges
Testing & Assessment
Students
Financial Modeling
Operations Research
High Performance Computing
Physics
Live Webinars
Recorded Webinars
Upcoming Events
MaplePrimes
Maplesoft Blog
Maplesoft Membership
Maple Ambassador Program
MapleCloud
Technical Whitepapers
E-Mail Newsletters
Maple Books
Math Matters
Application Center
MapleSim Model Gallery
User Case Studies
Exploring Engineering Fundamentals
Teaching Concepts with Maple
Maplesoft Welcome Center
Teacher Resource Center
Student Help Center
CodeGeneration[C] - Maple コードの C コードへの変換
使い方
C(x, cgopts)
パラメータ
x
-
式、リスト、rtable、プロシージャ、またはモジュール
cgopts
(オプション) 1 つまたは複数の CodeGeneration のオプション
説明
C コマンドは Maple コードを ANSI C コードに変換します。
- パラメータ x が代数式の場合、その数式を変数に割り当てる C 文が生成されます。
- x が代数値のリスト、rtable、または Maple 配列の場合、要素を C 配列に割り当てる C 文の式列が生成されます。rtable または Maple 配列の場合、初期化されている要素のみが変換されます。
- x が 形式の式のリスト ( は名前、 は代数式) である場合、x は代入文の式列を意味するものとして解釈されます。この場合、等価な意味を持つ C の代入文の列が生成されます。
- x がプロシージャの場合、ライブラリの包含を行うのに必要な指示とともに、C 関数が生成されます。
- x がモジュールの場合、モジュールメンバーは CDetails ヘルプページの記載に従って変換されます。
パラメータ cgopts には 1 つ以上の CodeGeneration オプションを指定できます。オプションの詳細は CodeGenerationOptions を参照してください。
CodeGeneration パッケージによる Maple コードから他の言語への変換についての詳細は、Translation Details を参照してください。C への変換に特化した情報については、FortranDetails を参照してください。
例
以下の例で使用しているオプションについては、CodeGenerationOptions をご覧ください。
with(CodeGeneration):
単純な数式を変換し、目的のコード内の名前 ``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]:
C(cs, optimize);
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);
プロシージャを変換します。型が指定されていない変数はすべて 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:
C(f);
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:
C(m, resultname=t0);
#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 関数を含む式を変換します。
C(max(1/abs(x), x^2));
cg0 = (x * x >= 1 / abs(x) ? x * x : 1 / abs(x));
関連項目
CDetails、CodeGeneration、CodeGenerationOptions、Translation Details
Download Help Document