From: Tadashi Saito Date: 2003-07-10T23:07:15+09:00 Subject: [ruby-dev:20619] unreliable Infinity made with Integer#to_f and String#to_f (PR#510) 一応、ruby-devに振ってみます。 昨日の夜(朝?)まつもとさんがなさったbignum.cとobject.cの変更で、 値が大きすぎてto_fすると無限大と等しくなってしまう整数や文字列を 実際にto_fした時、警告が出るようになりました。 % ruby -e 'p (2**2048).to_f' -e:1: warning: Bignum out of Float range Infinity % ruby -e 'p (2**2048).to_s.to_f' -e:1: warning: Float 3231700607131100730071487668866995196044410266971548403213034 5427524655138867890893197201411522913463688717960921898019494119559150490921 095088 1523864482831206308773673009960917501977503896521067960576383840675682767922 186426 1975616183809433847617047058164585203630504288757589154106580860755239912393 038552 1914333389668342420684974786564569494856176035326322058077805659331026192708 460314 1502585928641771167259436037184618573575983511523016459044036976132332872312 271256 8471082020972515710172693132346967854258065669793504599726835299863821552516 638943 7335543602135433229604645318478604952148193555853611059596230656 out of range Infinity しかし、Floatにすると元の情報を正確に保てないという点で、上記の警告を エラーに変えるべき、という意見もあるかもしれません。 ----- Original Message ----- From: "Yukihiro Matsumoto" To: Cc: Sent: Thursday, July 10, 2003 1:06 AM Subject: Re: unreliable Infinity made with Integer#to_f and String#to_f (PR#510) > |> つまり、このようなオーバーフローが実行を継続してはいけないエ > |> ラーなのか、注意は必要だが実行を中断するほどではないか、とい > |> う判断だと思います。 > | > |自分も、警告が出て何らかの形でユーザに注意を促せれば、 > |構わないと思いました。 > > そうですか。なかなか難しい決断なのですが、エラーの方がいいか > もと思う時もあります。あるいは、もっと広く意見を求めるべきな > のでしょうか。 ということで、一応こちらで問題提起してみました。 何かご意見のある方はいらっしゃいますか? --- 斎藤ただし