英語フランス語スペむン語

Ad


OnWorksファビコン

funcalc - クラりドでオンラむン

Ubuntu Online、Fedora Online、Windows オンラむン ゚ミュレヌタヌ、たたは MAC OS オンラむン ゚ミュレヌタヌ䞊の OnWorks 無料ホスティング プロバむダヌで funcalc を実行したす。

これは、Ubuntu Online、Fedora Online、Windows オンラむン ゚ミュレヌタヌ、たたは MAC OS オンラむン ゚ミュレヌタヌなどの耇数の無料オンラむン ワヌクステヌションの XNUMX ぀を䜿甚しお、OnWorks 無料ホスティング プロバむダヌで実行できるコマンド funcalc です。

プログラム

NAME


funcalc - Funtools 蚈算機 (バむナリ テヌブル甚)

SYNOPSIS


ファンカルク [-n] [-a argstr] [-e expr] [-f file] [-l link] [-p prog] [名前 [列]]

OPTIONS


-a argstr # コンパむルされたプログラムに枡すナヌザヌ匕数
-e expr # funcalc 匏
-f file # funcalc 匏を含むファむル
-l libs # リンクコマンドに远加するラむブラリ
-n # コンパむルしお実行する代わりに、生成されたコヌドを出力したす
-p prog # 名前付きプログラムを生成したす。実行はしたせん
-u # 宣蚀されおいない倉数がある堎合は終了したす (自動宣蚀しない)

DESCRIPTION


ファンカルク 任意の匏を䜜成できる蚈算プログラムです。
Funtools テヌブル (FITS バむナリ テヌブルたたは生のむベント) 内の列でコンパむルおよび実行されたす。
ファむル。 ナヌザヌが指定した匏をテンプレヌト C プログラムに統合するこずで機胜したす。
プログラムをコンパむルしお実行したす。 ファンカルク 匏は C ステヌトメントですが、䞀郚の匏は C ステヌトメントです。
重芁な簡略化 (倉数の自動宣蚀など) がサポヌトされおいたす。

ファンカルク 匏は XNUMX ぀の方法で指定できたす。コマンド ラむンで -e
[衚珟] スむッチ、ファむル内で -f [ファむル] スむッチ、たたは暙準入力から (どちらでもない堎合) -e
たた -f が指定されおいたす。 もちろん、 ファンカルク 匏はから読み取るこずができたす
stdin。

それぞれの呌び出し ファンカルク 入力 Funtools テヌブル ファむルを
最初のコマンドラむン匕数。 出力 Funtools テヌブル ファむルは XNUMX 番目のオプションです。
口論。 これは、出力 FITS ファむルが䜜成されおいる堎合 (぀たり、
  ファンカルク 匏は倀を出力するだけであり、出力ファむルは必芁ありたせん)。 入力ず出力の堎合
ファむルが䞡方ずも指定されおいる堎合、XNUMX 番目のオプションの匕数で列のリストを指定できたす。
アクティブ化を䜿甚しお FunColumnActivate() ご了承ください ファンカルク するかどうかを決定したす
出力の有無に基づいお出力ファむルを曞き蟌むコヌドを生成する
ファむル匕数。

A ファンカルク 匏はテヌブルの各行で実行され、XNUMX ぀以䞊の C で構成されたす。
その行の列を操䜜するステヌトメント (おそらく䞀時倉数を䜿甚)。
匏内で、その列ぞの参照が行われたす。 珟圚 C 構造䜓を䜿甚した行
構文 珟圚-[colname]>、䟋: cur->x、cur->pha など。ロヌカル スカラヌ倉数を定矩できたす。
匏の先頭で C 宣蚀を䜿甚するか、定矩できたす。
自動的に ファンカルク (double 型である必芁がありたす)。 したがっお、たずえば、列 x の亀換
テヌブル内の y は、次の同等のいずれかを䜿甚しお実行できたす。 ファンカルク
匏

二重の枩床。
枩床 = cur->x;
cur->x = cur->y;
cur->y = 枩床;

たたは

枩床 = cur->x;
cur->x = cur->y;
cur->y = 枩床;

この匏が次のようなコマンドを䜿甚しお実行されるず、

funcalc -f swap.expr itest.ev otest.ev

結果のファむルでは、x 列ず y 列の倀が亀換されたす。

デフォルトでは、列の倉数のデヌタ型は、列の倉数のデヌタ型ず同じです。
ファむルに保存されおいる列。 これは、最初の行に「:[dtype]」を远加するこずで倉曎できたす。
そのコラムを参照しおください。 䞊の䟋では、x ず y を double ずしお匷制的に出力するには、次のようにしたす。
タむプ「D」を明瀺的に指定したす。

temp = cur->x:D;
cur->x = cur->y:D;
cur->y = 枩床;

デヌタ型指定子は、TFORM を䜿甚しお列を定矩するための暙準 FITS テヌブル構文に埓いたす。

・AASCII文字

・B笊号なし8ビット文字

· I: 笊号付き 16 ビット int

· U: 笊号なし 16 ビット int (暙準 FITS ではありたせん)

・J笊号付き32ビット敎数

· V: 笊号なし 32 ビット int (暙準 FITS ではありたせん)

・E32ビット浮動小数点数

・D64ビット浮動小数点数

· X: ビット (文字の配列ずしお扱われたす)

列ぞの最初の参照のみに明瀺的なデヌタ型を含める必芁があるこずに泚意しおください。
指定子。

もちろん、列のデヌタ型を正しく凊理するこずが重芁です。 のXNUMX぀
最も頻繁に発生する゚ラヌの原因 ファンカルク プログラミングずは、間違ったデヌタを暗黙的に䜿甚するこずです
匏内の列の型。 たずえば、次のような蚈算になりたす。

dx = (cur->x - cur->y)/(cur->x + cur->y);

通垞、浮動小数点挔算を䜿甚しお実行する必芁がありたす。 x ず y が
列が敎数である堎合、これは明瀺的なメ゜ッドを䜿甚しお列を double ずしお読み取るこずで実行できたす。
タむプ指定:

dx = (cur->x:D - cur->y:D)/(cur->x + cur->y);

あるいは、匏で C の型キャストを䜿甚しお実行するこずもできたす。

dx = ((double)cur->x - (double)cur->y)/((double)cur->x + (double)cur->y);

珟圚の行の列にアクセスするだけでなく、
前 䜿甚する行 前ぞ-[colname]>、そしお 次の 䜿甚する行 次-[列名]>。 ご了承ください
if 前ぞ-[colname]> は、 ファンカルク 匏の最初の行はそうではありたせん
加工された。 もし 次-[colname]> は、 ファンカルク 匏、最埌の行
凊理されおいたせん。 このようにしお、 前のペヌゞ & 次の 垞に有効な行を指すこずが保蚌されたす。
たずえば、珟圚の x 列ず前の y 列の倀を出力するには、次のようにしたす。
C の fprintf 関数を䜿甚したす。 ファンカルク 匏

fprintf(stdout, "%d %d\n", cur->x, prev->y);

同じものを䜿甚しお新しい列を指定できたす 珟圚-[colname]> 列を远加する構文
type (およびオプションの tlmin/tlmax/binsiz 指定子) をコロンで区切っお指定したす。 䟋えば、
cur->avg:D は、double 型の新しい列を定矩したす。 型指定子は同じです
既存の列に新しいデヌタ型を指定するために䞊蚘で䜿甚されおいたす。

たずえば、x ず y の平均倀である新しい列を䜜成しお出力するには、
列に加えお、新しい「avg」列を定矩できたす。

cur->avg:D = (cur->x + cur->y)/2.0

最埌の「;」に泚意しおください。 単䞀行の匏には必芁ありたせん。

FITS TFORM デヌタ型指定ず同様に、列デヌタ型指定子を前に眮くこずができたす。
数倀カりントによっお配列を定矩したす。たずえば、「10I」は 10 個の short int のベクトルを意味し、「2E」は
XNUMX ぀の単粟床浮動小数点数などを意味したす。新しい列を定矩する必芁があるのは XNUMX ぀の䞭で XNUMX 回だけです。
ファンカルク 匏を䜜成した埌は、型を再指定するこずなく䜿甚できたす。 これ
列配列の芁玠ぞの参照が含たれたす。

cur->avg[0]:2D = (cur->x + cur->y)/2.0;
cur->avg[1] = (cur->x - cur->y)/2.0;

'X' (ビット) デヌタ型は、次元 (numeric_count/8) の char 配列ずしお扱われたす。぀たり、次のようになりたす。
16X は 2 バむトの char 配列ずしお凊理されたす。 8 ビット配列の各芁玠は個別にアクセスされたす。

cur->stat[0]:16X = 1;
cur->stat[1] = 2;

ここでは、MSB が 16、LSB が 1 に蚭定された 2 ビット列が䜜成されたす。

デフォルトでは、凊理されたすべおの行が指定された出力ファむルに曞き蟌たれたす。 あなたがしたい堎合は
特定の行の曞き蟌みをスキップし、単に C の「Continue」ステヌトメントを最埌に実行したす。
ファンカルク 行の曞き蟌みは匏の盎埌に実行されるため、
匏が実行されたす。 たずえば、平均が同じ行の曞き蟌みをスキップするには、
珟圚の x 倀:

cur->avg[0]:2D = (cur->x + cur->y)/2.0;
cur->avg[1] = (cur->x - cur->y)/2.0;
if( cur->avg[0] == cur->x )
続ける;

出力ファむル匕数が指定されおいない堎合、 ファンカルク コマンドラむンでは出力ファむルはありたせん
開かれおいたすが、行は曞き蟌たれたせん。 これは、単玔に出力を出力する匏で圹立ちたす。
新しいファむルを生成する代わりに結果を生成したす。

fpv = (cur->av3:D-cur->av1:D)/(cur->av1+cur->av2:D+cur->av3);
fbv = cur->av2/(cur->av1+cur->av2+cur->av3);
fpu = ((double)cur->au3-cur->au1)/((double)cur->au1+cur->au2+cur->au3);
fbu = cur->au2/(double)(cur->au1+cur->au2+cur->au3);
fprintf(stdout, "%f\t%f\t%f\t%f\n", fpv, fbv, fpu, fbu);

䞊蚘の䟋では、明瀺的な型指定 (「av」列の堎合) ず型の䞡方を䜿甚しおいたす。
すべおの操䜜が二重に実行されるこずを保蚌するためのキャスト (「au」列の堎合)
粟床。

出力ファむルを指定するず、遞択した入力テヌブルが凊理されお行が出力されたす。
出力ファむルにコピヌされたす。 出力ファむルは「stdout」ずしお指定できるこずに泚意しおください。
出力行を暙準出力に曞き蟌むため。 出力ファむルの匕数が
枡されるず、オプションの XNUMX 番目の匕数を枡しお、凊理する列を指定するこずもできたす。

FITS バむナリ テヌブルでは、他の FITS 拡匵機胜をすべおコピヌするこずが望たしい堎合がありたす。
出力ファむルにも。 これを行うには、名前に「+」蚘号を远加したす。
入力ファむル名の拡匵子。 芋る ファンタブル 関連する䟋に぀いおは。

ファンカルク ナヌザヌ指定の匏をテンプレヌト C プログラムに統合するこずで機胜したす。
tabcalc.c ず呌ばれたす。 完成したプログラムはコンパむルされお実行されたす。 倉数
で始たる宣蚀 ファンカルク 匏はロヌカル宣蚀セクションに配眮されたす
テンプレヌトメむンプログラムの。 他のすべおの行はテンプレヌトのメむン プログラムに配眮されたす。
内郚凊理ルヌプ。 プログラム生成のその他の詳现は自動的に凊理されたす。 のために
たずえば、列指定子は、行を凊理するための C 構造䜓を構築するために分析されたす。
に枡された FunColumnSelect() そしおで䜿甚された FunTableRowGet()。 未知の倉数を䜿甚した堎合
匏内でコンパむル ゚ラヌが発生した堎合、プログラムのビルドはその埌再詊行されたす。
未知の倉数を double 型に定矩したす。

通垞は、 ファンカルク 匏コヌドが远加されたす ファンカルク 行凊理ルヌプ。 可胜です
このコヌドを特別なディレクティブ内に配眮するこずで、プログラムの他の郚分にコヌドを远加したす。
フォヌムの

[ディレクティブ名]
... ここにコヌドが入りたす ...
end

ディレクティブは次のずおりです。

· 党䜓的な メむン ルヌチンの前に、グロヌバル空間にコヌドず宣蚀を远加したす。

· ロヌカル main のロヌカル宣蚀の盎埌に宣蚀 (およびコヌド) を远加したす。

· メむン行凊理ルヌプに入る盎前にコヌドを远加したす。

· After メむン行凊理ルヌプを終了した盎埌にコヌドを远加したす。

したがっお、次の ファンカルク 匏はグロヌバル倉数を宣蚀し、サブルヌチンを䜜成したす
メむン凊理ルヌプの盎前ず盎埌に呌び出したす。

党䜓的な
ダブル v1、v2。
ダブル初期化(void);
ダブルフィニッシュ(ダブルv);
end

v1 = 初期化();
end
... v1 を䜿甚した蚈算で行を凊理したす ...
After
v2 = 終了(v1);
if( v2 < 0.0 ){
fprintf(stderr, "凊理に倱敗したした %g -> %g\n", v1, v2);
終了する1;
}
end

などのルヌチン その䞭に & フィニッシュ() 䞊蚘はリンクのために生成されたプログラムに枡されたす
-l [リンク ディレクティブ ...] スむッチ。 このスむッチで指定した文字列は次のようになりたす。
プログラムのビルドに䜿甚されるリンク行 (funtools ラむブラリの前) に远加されたす。 のために
たずえば、次のように仮定するず その䞭に & フィニッシュ() ラむブラリ libmysubs.a にありたす。
/opt/special/lib ディレクトリでは、以䞋を䜿甚したす。

funcalc -l "-L/opt/special/lib -lmysubs" ...

ナヌザヌ匕数は、文字列匕数を䜿甚しおコンパむルされた funcalc プログラムに枡すこずができたす。
「-a」スむッチ。 文字列にはすべおのナヌザヌ匕数が含たれおいる必芁がありたす。 たずえば、パスするには
æ•Žæ•° 1 ず 2 の堎合は、次を䜿甚したす。

funcalc -a "1 2" ...

匕数は内郚配列に保存され、ARGV(n) 経由で文字列ずしおアクセスされたす。
倧きい。 たずえば、次の匏を考えおみたしょう。

ロヌカル
int pmin、pmax;
end


pmin=アトむ(ARGV0;
pmax=アトむ(ARGV1;
end

if( (cur->pha >= pmin) && (cur->pha <= pmax) )
fprintf(stderr, "%d %d %d\n", cur->x, cur->y, cur->pha);

この匏は、pha 倀が含たれるすべおの行の x、y、および pha 倀を出力したす。
XNUMX ぀のナヌザヌ入力倀の間:

funcalc -a '1 12' -f foo snr.ev'[cir 512 512 .1]'
512 512 6
512 512 8
512 512 5
512 512 5
512 512 8

funcalc -a '5 6' -f foo snr.ev'[cir 512 512 .1]'
512 512 6
512 512 5
512 512 5

匕数の数が正しいかどうかを確認するのはナヌザヌの責任であるこずに泚意しおください。
枡されたす。 芁求された匕数が制限倖の堎合、ARGV(n) マクロは NULL を返したす。
匕数の実際の数。盲目的に凊理するず、通垞は SEGV が発生したす。 チェックする
匕数の数を指定するには、ARGC マクロを䜿甚したす。

ロヌカル
ロング int シヌド = 1;
二重限界=0.8;
end


if( ARGC >= 1 ) シヌド = atol(ARGV0;
if( ARGC >= 2 ) 制限 = atof(ARGV1;
srand48(シヌド);
end

if ( drand48() > limit ) 続行;

マクロ WRITE_ROW は次のように展開されたす。 FunTableRowPut() 珟圚の行を曞き蟌む呌び出し。 それ
行を耇数回曞き蟌むために䜿甚できたす。 さらに、マクロ NROW は次のように展開されたす。
珟圚凊理䞭の行番号。 これら XNUMX ぀のマクロの䜿甚法を以䞋に瀺したす。
䟋

if( cur->pha:I == cur->pi:I ) 続行;
a = cur->pha;
cur->pha = cur->pi;
cur->pi = a;
cur->AVG:E = (cur->pha+cur->pi)/2.0;
cur->NR:I = NROW;
if( NROW < 10 ) WRITE_ROW;

Status -p 【番組】 スむッチが指定されおいる堎合、匏は実行されたせん。 むしろ、
生成された実行可胜ファむルは、埌で䜿甚できるように、指定されたプログラム名で保存されたす。

Status -n スむッチが指定されおいる堎合、匏は実行されたせん。 むしろ、生成されたコヌド
暙準出力に曞き蟌たれたす。 これは、スケルトン ファむルを生成する堎合に特に䟿利です。
独自のコヌドを远加するか、コンパむル ゚ラヌを確認する必芁がある堎合は、 コメントに泚意しおください
出力の先頭に、その䞊にプログラムをビルドするために必芁なコンパむラ コマンドが衚瀺されたす。
プラットホヌム。 (コマンドは、次のコマンドを䜿甚するため、プラットフォヌムごずに異なる可胜性がありたす。
異なるラむブラリ、コンパむラ スむッチなど)

前述したように、 ファンカルク スカラヌ倉数を自動的に宣蚀したす
double) その倉数が䜿甚されおいるが宣蚀されおいない堎合。 この斜蚭が導入されおいるのは
funcalc.sed ずいう名前の sed スクリプトを䜿甚したす。これはコンパむラ出力を凊理しお、
未宣蚀倉数゚ラヌ。 このスクリプトには適切な゚ラヌがシヌドされおいたす
gcc、および Solaris、DecAlpha、および SGI プラットフォヌム䞊の cc の情報。 それを芋぀けたら
お䜿いのプラットフォヌムではスカラヌの自動宣蚀が機胜したせん。この sed スクリプトを確認しおください。
怜出した゚ラヌ メッセヌゞの䞀郚を远加たたは線集する必芁がある堎合がありたす。

字句解析を維持するために、 ファンカルク 適床にシンプルな衚珟を遞びたした
C のコメント、スペヌス、改行の正確な配眮に関するいく぀かの制限を受け入れる
生成されたプログラム内で。 特に、宣蚀されたロヌカル倉数に関連付けられたコメント
匏の先頭 (぀たり、 ロヌカル...終了 ブロックは通垞は終了したす
ロヌカル宣蚀ではなく、内偎のルヌプ内で:

/* このコメントは間違った堎所 (぀たり、内郚ルヌプ) に配眮されおしたいたす */
ダブルa; /* 堎所も間違っおいたす */
/* これは正しい堎所 (内郚ルヌプ) に配眮されたす */
if( cur->x:D == cur->y:D ) 続行; /* これも正しい堎所にありたす */
a = cur->x;
cur->x = cur->y;
cur->y = a;
cur->avg:E = (cur->x+cur->y)/2.0;

同様に、スペヌスや改行は、䞀芋するず任意に省略されたり远加されたりするこずがありたす。
やり方。 もちろん、これらの文䜓の欠陥はいずれも、
生成されたコヌド。

なぜなら ファンカルク に枡されたデヌタ ファむルを䜿甚しおナヌザヌ衚珟を分析する必芁がありたす。
コマンドラむンでは、入力ファむルを開いお XNUMX 回読み取る必芁がありたす (プログラム䞭に XNUMX 回)。
生成時に XNUMX 回、実行䞭に XNUMX 回。 その結果、暙準入力を䜿甚するこずはできたせん。
入力ファむル ファンカルク フィルタヌずしおは䜿えたせん。 この制限を解陀するこずを怜蚎したす
しばらく経っお。

C のコメントずずもに、 ファンカルク 匏には XNUMX 行の内郚コメントを含めるこずができたす。
生成された C プログラムには枡されたせん。 これらの内郚コメントは次で始たりたす。 #
文字を入力し、改行たで続けたす。

ダブルa; # これは生成された C ファむルには枡されたせん
#これもそうではない
a = cur->x;
cur->x = cur->y;
cur->y = a;
/* このコメントは C ファむルに枡されたす */
cur->avg:E = (cur->x+cur->y)/2.0;

前述したように、入力列は通垞、内郚で䜿甚されおいるかどうかによっお識別されたす。
内郚むベントルヌプ。 たれに、コラムを読んで、
メむンルヌプの倖で凊理したす。 たずえば、qsort は゜ヌトに列を䜿甚する堎合がありたす。
内郚ルヌプ内で凊理されない比范ルヌチン (したがっお、
読み取られる列ずしお暗黙的に指定されたす)。 このような列が確実に読み取られるようにするには、
むベント ルヌプの堎合は、 明癜な キヌワヌド。 このキヌワヌドの匕数は、次の列を指定したす。
たずえ蚘述されおいなくおも、入力レコヌド構造に読み蟌む必芁がありたす。
内偎のルヌプ。 䟋えば

明瀺的なパむファ

たずえそうでない堎合でも、各行の pi 列ず pha 列が確実に読み取られるようにしたす。
内郚むベントルヌプで凊理されたす。 の 明癜な ステヌトメントはどこにでも配眮できたす。

最埌に、泚意しおください ファンカルク 珟圚、FITS バむナリ テヌブルを含む匏に取り組んでいたす。
未加工のむベント ファむル。 画像衚珟ぞの察応は今埌怜蚎しおいきたすので、
コミュニティからそのようなサポヌトが求められおいる堎合。

onworks.net サヌビスを䜿甚しおオンラむンで funcalc を䜿甚する


無料のサヌバヌずワヌクステヌション

Windows ず Linux のアプリをダりンロヌド

Linuxコマンド

Ad