[ruby-list:50262] Re: 有理数型Rationalクラスで扱える限界値は?

From: Yoshiizumi <yoshi@...>
Date: 2015-11-25 13:39:25 UTC
List: ruby-list #50262
 よしいずみです。

 坂野さん、返信ありがとうございました。
 1億桁でも大丈夫というのは凄いです。
 実質的に限界値はないと考えていいようですね。

 ちなみに、提示していただいたプログラムを実行したところ、1億桁だと、待
っていても終わりそうになかったので中断しました(あせ)。
 一桁下げて、1千万桁で試したら、101.435103秒かかりました。

 rubyの開発に携わった方々に、改めて感謝です。


Masa Sakano <imagine@sakano.co.uk> Wrote:
> 
> 坂野正明です。
> 
> 
> On 24 Nov 2015, at 12:49, Yoshiizumi <yoshi@cup.sakura.ne.jp> wrote:
> >  教えていただきたいのは、Rationalクラスの分子と分母が巨大な数になっても
> > 動作していることは分かりますが、どのくらいまで大きな数を扱えるかというこ
> > とです。
> >  その限界値を知る方法というのはあるのでしょうか。あるいは、限界値という
> > のは特にないのでしょうか。
> 
> Ruby の Rationalクラスは、Integerクラスを使って実装されていると
> 理解しています。Integer は、その実は数が小さいところでは
> Fixnumクラス、大きいところでは Bignumクラスとなっていて、
> Binumクラスは無限桁のはずです。もちろん、正確には、
> メモリの制限があるはずなので、10^9桁を遥かに超えるようならば
> 考慮する必要があるかも知れません。ただし、それ以前の問題として、
> 極端に大きな桁の数を扱えば、単純な計算にも恐ろしく時間がかかる
> ので、使い物にならないでしょう。
> 
> たとえば、以下のようにすることで、1億桁の数字でも期待通りに
> 動作していることが確認できます。
> % ruby -e 'a=("1"*1e8).to_i; b=a+1; p b-a'
> 
> # お使いの計算機次第では、1億桁だと時間がかかるかも知れません。
> # 1万桁とかならば、現代の計算機ならば問題になることはないでしょう。
> 
> 
> ちなみに、Integer が Fixnum と Bignumに分かれているのは、
> 実用的な実装上の問題として、数が小さい時は(C言語で表現される)整数型を
> 直接使用した方が、実行速度的にはるかに有利だからだと理解しています。
> しかし、Fixnum/Bignum をシームレスに実装するための苦労は尋常では
> 無かった、と聞いたものでした……(まつもとさんを中心とした開発者の
> おかげさまで、大変、快適な言語に仕上っていますね _o_)
> 
> ご参考までに。
> 
> 坂野正明

In This Thread

Prev Next