endendRubyで遊んでると数値の桁を調べたくなることが稀によくあります。真っ先に思いつくのが一旦文字列にする方法です。9で文字列にしたり戻したり無駄味ある計算で出したほうが早いんだろうなーとかいつも思ってました。数値計算で桁を調べるなので試しに文字列に変換しないメソッドも作ってみました。endendベンチマークで、意気揚々とベンチ取ったら明らかに文字列に変換したほうが速かったです。4.396235)クソアルゴリズムすぎたんでしょうか?たしかにちょっと考えれば、大きい数値を何度も計算していて明らかに非効率です。他に数値計算で効率のいい方法が思いつきません。多少の書き方の違いはあるでしょうけど、劇的に早くなる方法はあるんでしょうか。(あったら教えてほしいです。大きな数値をそのまま計算せず、おおまかに桁を分けることで大幅に処理時間を短縮したメソッドを教えていただきました。コメント欄参照)おとなしく一旦文字列にしたほうが実行速度もソースも短くなりそうでした。(Math.log10で桁数を数える)桁数を数える方法については、コメントで教えていただいたlogを使う方法が爆速でした。80万桁の数値を用意。0.000026)各桁を得るほうはやっぱり文字列にしたほうが良さげ。(桁数が少ないなら文字列に変換しないほうが速い)各桁を得る方法について。上では「8万桁の大きな数値を1回だけ変換」した時間を計測して、文字列に変換したほうが速いという結果が出ました。「10桁の数値を100万回変換」した場合は計算で得る方法の方が速かったです。桁数が少ない場合は計算で得る方法のほうが速いので、適材適所な感じで使い分けるといいかもしれません。