2018年10月7日投稿 / 投稿者 : Ryou Tanpo / タグ : 投稿プログラム Ryou Tanpo ライブラリ 配列 配列 ARYOP ARYOPEX
のべ 1521 人の方にお越しいただきました。ありがとうございます!
プチコン3号/BIG には ARYOP 命令というものがあります。これは配列変数どうしの四則演算や積和、補間などを高速に行うことができる命令です。もちろん命令呼び出しのオーバーヘッドがかかるため、要素数がたとえば 10 といった配列変数ではむしろ FOR ループで処理する方が速いのですが、サイズの大きな配列変数には桁違いの効果を発揮します。
ARYOP は次の書式で使います。
- ARYOP 演算タイプ,出力配列O,入力配列A,入力配列B
- ARYOP 演算タイプ,出力配列O,入力配列A,入力配列B,入力配列C
加算、減算などどんな演算であってもこの ARYOP 命令で行うことができます。演算の種類は第1引数で指定します。数値で指定することができますが、専用の定数が用意されているので、プログラムのサイズを圧縮する以外の目的で数値を意識する必要はないでしょう。
下の表は ARYOP でできる演算の一覧です。式で表した演算というのは、その演算タイプを指定したときに ARYOP が配列変数の各要素に対して内部で実行している式と考えてください。添字は省略しています。
定数 | 値 | 式で表した演算 | 演算の意味 |
---|---|---|---|
#AOPADD | 0 | O=A+B | A の各要素に B の各要素を足した結果を O の各要素に代入 |
#AOPSUB | 1 | O=A-B | A の各要素から B の各要素を引いた結果を O の各要素に代入 |
#AOPMUL | 2 | O=A*B | A の各要素に B の各要素を掛けた結果を O の各要素に代入 |
#AOPDIV | 3 | O=A/B | A の各要素を B の各要素で割った結果を O の各要素に代入 |
#AOPMAD | 4 | O=A*B+C | A の各要素に B の各要素を掛けたものに、さらに C の各要素を足した結果を O の各要素に代入 |
#AOPLIP | 5 | O=A*C+B*(1-C) | A から B までの範囲を C の値で補間した結果を O の各要素に代入 |
#AOPCLP | 6 | 不明 | A の各要素を B 以上 C 以下の範囲に丸めた結果を O の各要素に代入 |
入力配列の数は基本2つですが、上記の式に C が含まれているものは3つとなります。
このようになかなか優れている ARYOP ではありますが、表を見てみると演算タイプが少ないのが惜しいところです。うまく組み合わせれば RGBREAD のように、配列変数の各要素を ARGB に分解、といったこともできるのですが、それを何回も書くのは煩わしいことです。せっかくならライブラリ化出来ないか、そこから ARYOPEX2 が生まれました。
ARYOPEX2 は当初は、たとえば標準にはない剰余を求めるために
- ARYOPEX @AOPMOD,O,A,B,
という風に利用することができました。標準の ARYOP とかなり似た書式で使いやすかったかもしれませんが、引数の数を合わせる影響でコンマを余分に記述しなければならなかったり、内部の処理が遅かったり、という理由で廃止しました。現在では各演算タイプごとに命令が用意され、以下の命令が利用できます。
- AOPADD O,A,B
- AOPSUB O,A,B
- AOPMUL O,A,B
- AOPDIV O,A,B
- AOPMAD O,A,B,C
- AOPLIP O,A,B,C
- AOPCLP O,A,B,C
- AOPMOD O,A,B
- AOPINT O,A
- AOPROUND O,A
- AOPSGN O,A
- AOPABS O,A
- AOPRAD O,A
- AOPDEG O,A
- AOPLEQ O,A,B
- AOPLNE O,A,B
- AOPLLT O,A,B
- AOPLGT O,A,B
- AOPLLE O,A,B
- AOPLGE O,A,B
- AOPIDX O,A,B
各命令の詳細は編集中です。命令名やライブラリ内部を見れば多少わかるかもしれません。
プロジェクトに一緒に含まれている TEST はテストプログラムです。 起動すると表示されるメインメニューの項目ごとに説明します。
配列に対して、同じ処理を ARYOPEX2 ライブラリを使ったときと素直に FOR ループを回したときの実行時間を比較し、配列がどのくらいのサイズになったとき ARYOPEX2 を使うと効果的か調べることができます。
SYS/EX8TECHDEMO のように実行速度を計測するものではありません。
十字ボタン左右で演算タイプを選択し、Aボタンを押してください。
ARYOPEX2 ライブラリを使ったときと素直に FOR ループを回したときの結果がちゃんと合っているかをチェックします。
...が、現在実装しておらず選択しても「戻る」しか出てきません。次のアップデートをお待ちください。
ダウンロードしました 946
この作品に対するコメントがあれば一言どうぞ。(作品に直接関係ない質問や雑談は掲示板へ)
表示モード : [ スマホ・3DS対応表示 | クラシック表示 ]
PukiWiki 1.4.7 Copyright © 2001-2006 PukiWiki Developers Team. License is GPL. Based on "PukiWiki" 1.3 by yu-ji
ページの処理時間 : 0.138 秒 | このページの最終更新 : 2022/09/20 (火) 12:49:14 (565d) | ログイン
Copyright(C) 2011-2014 プチコンまとめWiki ◆1sxkymI8ji30