awkについて語るスレ $3 (161レス)
上下前次1-新
抽出解除 必死チェッカー(本家) (べ) 自ID レス栞 あぼーん
74(1): デフォルトの名無しさん [sage] 2024/06/18(火) 13:24:24.39 ID:Yg9xtfWz(1/8) AAS
awkでC言語のソースを自動生成したことあるぞ
30ウン年前
三角関数のテーブル
360度を256等分して、2バイト符号付き整数でsinとcosが32768分のいくつかっていうのを並べたテーブル
75(1): デフォルトの名無しさん [sage] 2024/06/18(火) 13:55:32.44 ID:Yg9xtfWz(2/8) AAS
Copilot
それは非常に興味深いプロジェクトですね。AWKを使ってC言語のソースコードを自動生成するのは、特に数学的な計算やデータ処理が必要な場合に便利です。三角関数のテーブルを生成するというのは、特に組み込みシステムやリアルタイムアプリケーションで役立つことでしょう。
AWKはテキスト処理に特化したプログラミング言語であり、行単位のデータを処理するのが一般的な使い方ですが、プログラミング言語としての機能も備えているため、行単位のデータ以外を処理することも可能です。
例えば、360度を256等分して、各角度に対するsinとcosの値を2バイト符号付き整数で表現するテーブルは、以下のようなAWKスクリプトで生成できます。
BEGIN {
for (i = 0; i < 256; i++) {
# 角度をラジアンに変換
rad = i * (2 * 3.14159265358979323846 / 256);
# sinとcosの値を計算
sin_val = int(sin(rad) * 32768);
cos_val = int(cos(rad) * 32768);
# テーブルに値を出力
printf "%d, %d,\n", sin_val, cos_val;
}
}
このスクリプトは、0度から355度までの各角度に対して、sinとcosの値を計算し、それを32768でスケーリングして整数に変換し、テーブルとして出力します。AWKは数値計算にも対応しているため、このような用途にも適しています。
もし現代の環境で同様のテーブルを生成したい場合は、AWKだけでなく他のツールや言語を使う選択肢もありますが、AWKはそのシンプルさとポータビリティで依然として有用です。もし何かお手伝いできることがあれば、お知らせください。
87: デフォルトの名無しさん [sage] 2024/06/18(火) 16:54:28.15 ID:Yg9xtfWz(3/8) AAS
検索エンジンでなくAIに聞く練習をしてみた
自分
"awk gentab.awk -h" とやればヘッダが生成され、"awk gentab.awk -s" とすればソースが生成されるようにするにはどうすればいいんでしたっけ。
Copilot
AWKで特定のオプションに応じて異なる出力を生成するには、コマンドライン引数を処理するロジックをスクリプトに組み込む必要があります。-h オプションでヘッダを、-s オプションでソースを生成するようにするためには、以下のようなAWKスクリプトを書くことができます。
https://ideone.com/0gT1PT
このスクリプトは、コマンドライン引数をチェックして、-h が指定された場合はヘッダファイルの内容を、-s が指定された場合はソースファイルの内容を出力します。exit ステートメントは、それぞれのセクションの出力後にスクリプトの実行を終了させるために使用されます。
スクリプトを gentab.awk として保存した後、以下のコマンドを実行することで、それぞれのファイルを生成できます。
awk -f gentab.awk -h # ヘッダファイル生成
awk -f gentab.awk -s # ソースファイル生成
AWKスクリプトの詳細な使い方やオプションについては、オンラインのマニュアルやドキュメントを参照すると良いでしょう。もし他にも質問があれば、お気軽にどうぞ。
88: デフォルトの名無しさん [sage] 2024/06/18(火) 17:12:04.60 ID:Yg9xtfWz(4/8) AAS
ええっと、これを貼らなきゃ見えないのかな
https://ideone.com/e.js/0gT1PT
90(1): デフォルトの名無しさん [sage] 2024/06/18(火) 19:12:23.97 ID:Yg9xtfWz(5/8) AAS
こういう、固定小数点の三角関数が欲しい時にawkに生成させる話さ
short sin_table[] = {
0, 6392, 12539, 18204, 23169, 27244, 30272, 32137,
32767, 32137, 30272, 27244, 23169, 18204, 12539, 6392,
0, -6392, -12539, -18204, -23169, -27244, -30272, -32137,
-32767, -32137, -30272, -27244, -23169, -18204, -12539, -6392,
};
short cos_table[] = {
32767, 32137, 30272, 27244, 23169, 18204, 12539, 6392,
0, -6392, -12539, -18204, -23169, -27244, -30272, -32137,
-32767, -32137, -30272, -27244, -23169, -18204, -12539, -6392,
0, 6392, 12539, 18204, 23169, 27244, 30272, 32137,
};
93(1): デフォルトの名無しさん [sage] 2024/06/18(火) 19:32:36.51 ID:Yg9xtfWz(6/8) AAS
>>74で伝えてるじゃん
95: デフォルトの名無しさん [sage] 2024/06/18(火) 19:48:33.05 ID:Yg9xtfWz(7/8) AAS
>>94
>>90を見ればちゃんとだいたい三角関数になってるじゃん
簡単のため256等分を32等分にしようって提案しただけ
97: デフォルトの名無しさん [sage] 2024/06/18(火) 21:38:40.47 ID:Yg9xtfWz(8/8) AAS
>>96
それをループ展開するのさ
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.017s