プレイ日記
【AKKIOSP第9弾】 解像度から縦横比を求める「RATIO関数」 今回は、なんと、 Half-Quarter-Screen-Program 「HQSP」です。 まぁ、何の捻りもない、 ただただ単純な関数です。 複雑な比だと、動作速度が心配なので、 アドバイスお願い致します。 リストはコメントで。
3そうだね
プレイ済み
返信[1]
親投稿
ほいっ!リストでしっ! ちなみに、Half-Quarterってのは、 VGAの4分の1の更に半分の画面、 HQVGAのパクリ。 GBAで使われてます。 やべぇもうこんな時間…くそぉ! 今日もマリカーDSやってる時間が無い() おすやみさない でしっ!
1そうだね
プレイ済み
返信[2]
親投稿
おちゃめ ochame_nako
画面の解像度から縦横比を求めるだけならば1億、1兆という大きな値を計算することはないので現状の速度で何ら問題はないと思います。 それでも、高速化したいのであればループ回数を減らすようにすれば良いでしょう。現状では最大I回のループが必要となっていますが、これは最大SQR(I)回で問題ありません。これによってIの値が1兆ならば理論上では最大で100万倍の高速化が可能です。 私が作った簡易関数電卓QSPでは分数計算関数FRACを用意しているのですが、これを使っても比率計算を行うことは可能です。(ただの通分機能だけど) このFRAC関数のリストはHQSP程度ですが、力業で計算しているため遅いです。
1そうだね
プレイ済み
返信[3]
親投稿
ありがとうございます。^^ え~っと・・・その、 具体的にはどうすれば…?(混乱中)
0そうだね
プレイ済み
返信[4]
親投稿
ナツキ natukin1978
縦と横の最大公約数を求めて、縦と横をその値で割るのはどうでしょう。 2パターンしか試してませんが…… 最大公約数はユークリッドの互除法で求めています。(gcd関数)
0そうだね
プレイ済み
返信[5]
親投稿
ユークリットの除去法…? 1.AをBで割って余りを求め、Aに代入。 2.BをAで割って余りを求め、Bに代入。 3.1と2をどちらかが0になるまで繰り返す。 この解釈で合ってますか? 例えば81:45だったら、 A=81→B=36→A=9→B=0 おお!A=9で最大公倍数9で、9:5だ!
0そうだね
プレイ済み
返信[6]
親投稿
すげぇ!大幅高速化! ありがとうございます! ユークリッドさんすげぇ!
1そうだね
プレイ済み
返信[7]
親投稿
お陰さまで2行プログラムになりました。
0そうだね
プレイ済み
返信[8]
親投稿
ナツキ natukin1978
非再帰関数で作りましたね。 素晴らしい!
0そうだね
プレイ済み
返信[9]
親投稿
おちゃめ ochame_nako
Иあっキー#ジャロさんが最初に作ったプログラムは共通の素数で順番に割っていくものなので大きな素数を指定した場合にはすごく時間がかかってしまいます。 Nが素数かどうかはN回ループして調べる必要はなくSQR(N)回で済むので「アルゴリズムは同一のままであっても高速化はできる」という例を書かせていただきました。 互除法を使用するのはそれよりも良い方法ですね。
1そうだね
プレイ済み
返信[10]
親投稿
その、SQR(N)回っていうのが、 いまいちピンと来ないんですけど、 例えば、最初のアルゴリズムのままでやるなら、具体的にはどうすればいいんですか?
0そうだね
プレイ済み