コミュニティアイコン プチコン 非公式コミュニティ プレイ日記

アバター
あまさとしおん ◆mzDKTVUAtwqE
2020/7/16 14:19
2^53より大きな数値を正確に計算できる『BIG_CALCライブラリ』の開発を始めました。
1024^16も1の位までしっかり計算できます。
(上段:ライブラリによる計算、下段:プチコンによる計算)

この計算では処理時間が10秒ぐらい掛かりました。

コメント

アバター
あまさとしおん 2020/7/16 15:12 ◆mzDKTVUAtwqE
負数非対応はただ単に数値の文字列の頭にマイナスがついてるかどうかをチェックしていないだけだったり
アバター
あまさとしおん 2020/7/16 15:13 ◆mzDKTVUAtwqE
なんとなく「累乗 実装」でGoogle検索してみたら結構先人の知恵が見つかるものなんですねw
アバター
あまさとしおん 2020/7/16 15:29 ◆mzDKTVUAtwqE
うわあああ
先人の知恵でとてつもなく高速化した

指数が偶数ならば、指数を2で割って、仮数部を2乗する(これを再帰処理する)

というアルゴリズムなんだけど、これを掛け算に応用したら1秒未満で計算が終わるようになったw
アバター
あまさとしおん 2020/7/16 15:42 ◆mzDKTVUAtwqE
1707^20→8.04秒
1299^32→14.01秒
適当な数で試しても気が遠くなる時間はかからなくなった
アバター
あまさとしおん 2020/7/16 15:46 ◆mzDKTVUAtwqE
1903^20→26.97秒
1727^28→44.55秒

仮数部が2か3で割りにくい数ほど遅くなる(ショートカットが2か3の倍数にのみ適用されるため)
後者の1727に至っては11*157のためショートカットがかなり無力化してる。
アバター
あまさとしおん 2020/7/16 15:56 ◆mzDKTVUAtwqE
5415^41→108秒
さすがにこれは遅い…
アバター
あまさとしおん 2020/7/16 16:01 ◆mzDKTVUAtwqE
高速化に威力を発揮するショートカットコードはこちら
アバター
あまさとしおん 2020/7/16 16:05 ◆mzDKTVUAtwqE
コマンド
BIG_CALC(左項,演算子,右項)…演算
BIG_QS(値,指数)…十進シフト(QuickShiftの略)
アバター
あまさとしおん 2020/7/16 16:39 ◆mzDKTVUAtwqE
作り掛けだけど放流します(謎のおまけが大量に)
7KA3 YPQS
アバター
あまさとしおん 2020/7/16 16:39 ◆mzDKTVUAtwqE
そのまま実行すると演算テストモードになります。
アバター
ツララ 2020/7/16 16:54 ◆ArUdBYOYME1V
扱う数が3桁以上の素数の場合のテーブル処理作ってみたらいいんじゃないんです?
どの辺までテーブルを用意するかは実行させながら要調整でしょうけど。
アバター
あまさとしおん 2020/7/16 17:31 ◆mzDKTVUAtwqE
テーブルも考えたんですが、「計算したい数がテーブルに該当する確率」に対して、実装する手間が大きすぎるので今のところ没案になっています。
アバター
あまさとしおん 2020/7/16 17:33 ◆mzDKTVUAtwqE
実行時にテーブル生成した場合→遅い
テーブルを作っておいてDATA等で記述→ファイルサイズが肥大する
テーブルの量を減らす→計算したい数がテーブルに該当する確率が下がるので効果が薄い
って感じですし
アバター
こういち 2020/7/16 18:54 ◆.Id/aHiU36hu
掛け算。カラツバ法ってのが速いって聞くけど、実装が面倒なんだよな。特に再帰の使えないMkU(挫折した理由それ)
れいさん曰く「プチコン。カラツバ使った方が遅いまである」らしいし…
アバター
あまさとしおん 2020/7/16 18:57 ◆mzDKTVUAtwqE
ググってみたけど難しそう
プチコンは処理速度の比率が独特なので一般に速い方法を使うと遅くなるのは日常茶飯事だし

今思ったけど1桁ずつ計算じゃなくて何桁ずつかまとめてもいいじゃんと今更気づいてしまった
アバター
こういち 2020/7/16 18:58 ◆.Id/aHiU36hu
さすがに250桁ぐらいになるとカラツバ法の方が速くなると信じたい。(一応カラツバ法も定数倍軽いらしいんだけどな…)
アバター
あまさとしおん 2020/7/16 19:59 ◆mzDKTVUAtwqE
プチコン自体で計算できる桁数はプチコンに投げつける処理を追加しました。
ちなみに、10の乗数のショートカットはBIG_QS関数として別名で搭載する予定です。
アバター
あまさとしおん 2020/7/18 14:57 ◆mzDKTVUAtwqE
ちょっとだけ進んだので公開
sbkey=[公開終了]

BIG_QS関数を追加しました。
10の乗数倍はこれをお使いください。

BIG_CALC関数も掛け算のショートカットが2,3,5,7の倍数に適用されるように強化しました。
アバター
さすらいの名無し 2020/7/18 17:06 ◆LWMA5UzCJb3e
A=POW(2,20)
B=POW(2,10)
にすると1時間位かかったという…()

確認したら4500秒だった

コメントを書く

  • こちらは「プチコン3号」「プチコンBIG」など、プチコンシリーズに関する話題を扱ったコミュニティです
  • プチコンシリーズにまったく関係ない書き込みはご遠慮下さい。削除の対象となります
  • こちらにはその他のゲームや雑談のコミュニティはなく、作る予定もありません (ひとりで管理できないため)。ごめんなさい
  • ユーザー登録なしで書き込みができます
  • 秘密の合い言葉は成りすましの防止 (トリップ機能)、書き込みの編集時の本人認証に使用します
  • 秘密の合い言葉に他人に推測されやすい言葉、他サービスと同じパスワードは入力しないでください。
  • 書き込むと、投稿時に入力したお名前と秘密の暗号が記憶され、ログイン状態になります

- WEB PATIO -