考えてみれば…パフォーマンスのヒットはあまりないと思います。
bignum は本質的に非常に大きな基数を持つため、たとえば 65536 以上の基数は、通常、従来の fixnum と整数の最大可能値です。
bignum のベースをどのくらいの大きさに設定するかはわかりませんが、fixnum や整数の代わりに使用するときに十分な大きさに設定すると、最初の bignum 桁を超えないため、操作通常の fixnums/int とほぼ同じになります。
これにより、最初の bignum 桁を超えて大きくならない bignum の最適化の機会が開かれ、それらを超高速の 1 桁演算に置き換えることができます。
そして、2 番目の bignum-digit が必要な場合は、n-digit アルゴリズムに切り替えます。
これは、ビットフラグとすべての算術演算の検証操作で実装できます。大まかに考えると、データブロックの最上位ビットが0に設定されている場合、最上位ビットを使用してbignumを表すことができ、それらを次のように処理しますそれらが通常の fixnum/int であるが、1 に設定されている場合は、ブロックを bignum 構造として解析し、そこから bignum アルゴリズムを使用します。
これにより、単純なループ イテレータ変数によるパフォーマンス ヒットを回避できるはずです。これは、パフォーマンス ヒットの最初の原因であると考えられます。
それは私の大雑把な考えにすぎません。あなたは私よりもよく知っているはずなので、提案です:-)
ps 申し訳ありませんが、bignum-digit と bignum-base の技術用語が何であるかを忘れていました