表示調整
閉じる
挿絵表示切替ボタン
▼配色
▼行間
▼文字サイズ
▼メニューバー
×閉じる

ブックマークに追加しました

設定
0/400
設定を保存しました
エラーが発生しました
※文字以内
ブックマークを解除しました。

エラーが発生しました。

エラーの原因がわからない場合はヘルプセンターをご確認ください。

169/210

幕間 素因数分解について考えた 後 (BigIntやBig.jsの利用も少し)

さて、素因数分解(正確には因数分解)、いきなり躓きです。


例えば、7365373222715531 は『素数』らしいのですが、これを前述のプログラムで走らせると間違った分解結果が表示されます。


平方根の小数点以下切り上げと切り捨てが同じならば、平方数とやったのが原因で、どうも桁数の問題で大きな数の平方根(Math.sqrt)が小数点以下を保持しない模様。


べき乗でも同様。


ただBigIntの利用は成功しましたので、まずそちらを説明します。


前回、ちょっと書いたように"tsconfig.json"のコンパイルオプションの変更なのですが、これは複数のオプションを追加していくことで行うようで、以下のようなオプション設定で利用できました。


------------------------------------------

{

  前略

  "target": "es2020",

  "module": "es2020",

  "lib": ["es2018", "dom", "ES2020.BigInt"]

 },

以下省略

}

------------------------------------------


※BigIntの利用については以下のリンクを参照してください。

BigInt

https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/BigInt




まだまだ問題はあります。


今までは切り上げ切り捨てなどをjavascriptのMathオブジェクトを使っていたのですが(とても便利)、このMathオブジェクト、BigIntに対応していません。


まあ、小数点以下何万桁で違ってもどうしようもないので、素直に再計算して評価するほかなさそうです。



この処理をすると今度は0.5のべき乗で文句が!


0.5は整数じゃないからBigIntとして扱えない!!(そりゃそうだ)


調べていくと『完全な精度で ~9 兆より大きい値や小さい値を扱うには、任意精度演算ライブラリーを使用する必要があります。』との事。



Number.isSafeInteger()

https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Number/isSafeInteger



それでも絶対に何かあるだろうとあれこれ探して見つけたのが"big.js"。



big.js

https://typescript-jp.gitbook.io/deep-dive/recap/number#big.js


インストールも簡単なようですので、早速、上記サイトに従い使ってみます。




インストールおよびimportは問題なく。


ただ使い方(演算など)が少し異なるようで、勉強してみます。


big.js

http://mikemcl.github.io/big.js/

そのメソッド

http://mikemcl.github.io/big.js/#prototype-methods




平方根や四則演算も含めて、大分勝手が違いますが、思いつくような演算はほぼ出来る模様。


計算も問題なく出来ているようです。(比較に.cmpを使う事に気づかないとハマるかも?)


ただし、かな~り遅い・・・

(100分の1秒単位が秒単位とか)



入力値によって任意精度演算ライブラリー(例えばここで使った"big.js")を使用するかどうか、処理を分ける必要がありそうですね。


とは言え、大変面白い経験でした。


大分満足したので、ゲームブック開発に戻ります。


投稿

評価をするにはログインしてください。
この作品をシェア
Twitter LINEで送る
ブックマークに追加
ブックマーク機能を使うにはログインしてください。
― 新着の感想 ―
このエピソードに感想はまだ書かれていません。
感想一覧
+注意+

特に記載なき場合、掲載されている作品はすべてフィクションであり実在の人物・団体等とは一切関係ありません。
特に記載なき場合、掲載されている作品の著作権は作者にあります(一部作品除く)。
作者以外の方による作品の引用を超える無断転載は禁止しており、行った場合、著作権法の違反となります。

この作品はリンクフリーです。ご自由にリンク(紹介)してください。
この作品はスマートフォン対応です。スマートフォンかパソコンかを自動で判別し、適切なページを表示します。

↑ページトップへ