• ベストアンサー

rubyエラー begum out of float range

メソッド定義 a(b,d) bの中からdつを選ぶ組み合わせの個数 a(7000,3500)*((1.0/ 300)**3500)*((299.0/ 300)**3500) これを計算させるにはどうしたらいいのでしょうか? begum out of float range のエラーがでます。

  • Ruby
  • 回答数1
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • mtaka2
  • ベストアンサー率73% (867/1179)
回答No.1

おそらく関数aはRationalで計算しているのだと思いますが、 「1.0」と記述すると、その数値は「Float」(浮動小数点型)で表現されます。 また、「RationalとFloatとの計算結果」はFloatになります。 以前の質問で別の方が答えられていた通り、Float 型は、精度に限度があり、その結果として「out of Float range」エラーになるのです。 数式中の小数値は、浮動小数点数(1.0/300)ではなく、Rational型になるようにすれば、「out of Float range」エラーは出なくなります。 a(7000,3500)*(Rational(1,300)**3500)*(Rational(299,300)**3500) で計算してください。 あと、Rationalは分数型ですので、そのまま結果表示すると分数で表示されてしまいます。 ですが、これを単純に小数(Float)に変換しようとすると、その段階で「out of Float range」になってしまいます。 一手間かかりますが、require "bigdecimal"した上で、 result = a(7000,3500)*(Rational(1,300)**3500)*(Rational(299,300)**3500) puts BigDecimal(result.numerator.to_s,1000)/BigDecimal(result.denominator.to_s,1000) とでもすれば、小数で表示できます。 ちなみに、そうやって上記結果を表示すると、 0.15(略)E-6569 と表示されますが、これは「0.(0が6569個)15(以下略)」という意味です。

関連するQ&A

  • rubyのエラー out of float range の原因

    rubyでout of float range と算出されました。 これは計算の桁が大きすぎるためなのでしょうか。 ルビーは計算の桁がメモリーの許す限り無限と聞いたのですが。 どういう意味なのか教えていただきたいです。

    • ベストアンサー
    • Ruby
  • OUT OF RANGE!

    誰か教えて下さいm(__)m パソコンを起動するとモニターにOUT OF RANGE!と出ます。 起動時にF8ボタンを押してセーフモードで入りたいのですが・・・ F8が表示されておらずセーフモードで入れません。 F9とF10はあるのですが・・・。 セットアップメニューの中にF8を出す方法とかあるんですか? どうしたら直るかわかりません。 よろしくお願い致します。

  • Adeck scrollbar property out of rangeとエラー表示がでます。

    ウィンドウズを立ち上げると初めにAdeck scrollbar property out of rangeとエラー表示がでます。 出ないようにするにはどうしたらよいのでしょうか。 これが何なのかもわかりません。

  • Index out of rangeというエラーが出ます

    MacOS9、2、New imacを使っております。一ヶ月程前から、パソコンを立ち上げている時に、いきなり「Index out of range」と言う表示が出て、スリープの状態になってしまいます。OKを何回かクリックすると、元に戻ります。(30回くらいしつこくクリックしないと戻らない時もあるので、かなりめんどくさいです)殆どメールとインターネットを主に使っているくらいなので、多分削除したメールが貯まり過ぎたんだろうと思い、optionを押しながらOutlook Express5を起動してみたのですが、その後、2週間はそんなエラーも出る事がなかったのですが、昨晩からまた頻繁に出始めました。電源をonしたまま、少しアイドリングした状態の時に出やすいようです。メールは送信済み、受信boxが3000件づつくらいだと思います。勝手にメールの関係でのエラーだと思い込んでますが、、、

    • 締切済み
    • Mac
  • モニターをPS3に繋ぐとOUT OF RANGE

    iiyamaのモニターをPS3に繋ぐと画面は正常っぽく表示されるのに「OUT OF RANGE] のワイプ表示が出っぱなしになってしまう モニターは無反応なのでPS3本体の設定を変えても直りません HDMI-DVI-D 変換コードが悪いのか よく分かりません 1080p対応のコードなんですが どなたか教えてください

  • OUT OF RANGEを回避できません

    ・OS:Windows NT 4.0 Workstation 富士通製PC&液晶モニタ 誤って解像度を、モニタの許容範囲に設定してしまい 真っ黒な画面に「OUT Of RANGE」と表示されたまま 何回再起動してもデスクトップに行かなくなりました(^^; VGAモードで起動すればデスクトップまで行くのですが そこで解像度を640x480に戻しても(というか選択肢がこれしかない) OSを通常起動すると、やっぱり「OUT OF RANGE」です(^^; しかも解像度をいじろうとすると、ディスプレイドライバが使用できません」って出て ドライバのインストール画面になるのですが、メーカーPCなので リカバリCDの中にwindowsが入ってるみたいで、ドライバが入れられません(^^; ちなみに、起動時にF8押しっぱなしにしてもセーフモードになりません(^^; 説明書どおりだと、ctrl押しながららしいのですが、それでもダメでした(^^; この状況下で、どうにか解決する方法はありませんでしょうか?例えば無理矢理セーフモードにする方法とか(^^; 色々な意見をお待ちしております・・・。 なんせ会社のPCなもんで m(T_T)m

  • OUT OF RANGE表示について

    過去の質問の中にもありましたが、 リフレッシュレートを変更できるとありましたが、 私のパソコンでは60ヘルツで固定されていて変更することができません。 私の場合LINUXを導入しようと思って途中の過程で、 OUT OF RANGE 36Hz 29.6kHZ と出力されてしまいます。 機種はSONYのVAIOデスクトップで、ディスプレイは15型TFT液晶です。 普段のモードでは1024×768ピクセルに設定されており、 セーフモードは640×480です。

  • EXCEL2002でRange.Copyでエラー

    お世話になります。 OSがWINDOWS XPの環境で EXCEL2002で既存の入力用のシートAとマクロで追加して削除するワーク用に2つのシートB,Cがあるのですが、ワーク用のシートに下記コマンドを実行するとエラーなります。EXCEL2003では問題なく動くのですが、EXCEL2002しか入っていない環境もあるのでご教授して頂ければ助かります。 Sheets("A").Range("d10:d60").Copy Sheets("B").Range("a1) Sheets("A").Range("h10:h60").Copy Sheets("B").Range("51") Sheets("A").Range("e10:e60").Copy Sheets("C").Range("a1) Sheets("A").Range("i10:i60").Copy Sheets("C").Range("51") 以上 宜しくお願いします。

  • ruby の nil エラー

    rubyで10C0~10C10までの値をすべて合計する 計算をさせようと思って作ったのですが。 定義はうまくできa(10,1)=10と計算できるのですが whileで合計させているところがうまくいきません。 関数的にはあっていると思うのですがnilエラーになってしまい ます。原因はなんなのでしょうか。。。 定義開始 ーーーーーーーーーーーーーーーーーーーーーー def a(g,h) puts a=1 b=1 while a<=g do b = b * a a = a + 1 end c=1 d=1 while c<=h do d = d * c c = c + 1 end e=1 f=1 while e<=g-h do f = f * e e = e + 1 end puts b / ( d * f ) end ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー 定義終了 aa=0 ab=0 while aa <= 10 ab=a(10,aa)+ab aa=aa+1 puts ab end これをすると ab=a(10,aa)+ab ここがNoMethodErrorと表示され 解がでません。 また、ab=a(10,aa)+ab これを ab=a(10,aa) こうすると 解がちゃんとでるのですが。 1 nil 10 nil 45 nil 210 nil . . . となってしまいます。

    • ベストアンサー
    • Ruby
  • Input Signal of Range ってでてきます。

    調べてみたのですが、いまいちわかりません。 Aでログインし Bにユーザー切り替え またAでログインすると 画面中央に【Input Signal of Range】とでてきます。 これはなんでかな? A、Bというのはユーザー名です。

専門家に質問してみよう