• ベストアンサー

大きな桁数の計算について

初心者で申し訳ないのですが、 今、 2531101.784317 -551549.664130 1298109.439175 -2439839.366861 3029558.903444 2808716.033509 -2235302.273335 4209602.374689 -903409.098650 -12186064.825295 この10個のデータ(ベクトル)のノルムを1にしたいと思い 計算しようと思ったのですが、 今このデータはdoubleの配列D[10]に入っているのですが、 このまま、D[i]*D[i]を計算すると、やっぱりオーバーフローを起こしますでしょうか? 調べたらdoubleは16桁までとあったので、 恐らく上か下の値が切れると思ったのですが、大丈夫なのでしょうか? 失敗する場合は、どのように対処すればよいでしょうか? doubleよりも有効桁数のある型とかがあるのでしょうか? すみませんが、アドバイスお願いします。

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

  • ベストアンサー
  • asuncion
  • ベストアンサー率33% (2127/6289)
回答No.1

提示された値の2乗程度の値は、 double型が扱える範囲(およそ10の308乗)に じゅうぶん収まります。

その他の回答 (2)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

オーバーフローの問題を回避するだけなら hypot を使えばいいんだけど, それとは別に「とりあえず絶対値最大の数値ですべてを割ってから考える」のがセオリーじゃないかなぁ. どうせ最終的には「ここの値の比率」だけが問題なんだから. ちなみに「double より有効桁数のある型があるかどうか」は処理系依存. 厳密に言うと「double より有効桁数の少なくない型」として long double はありますが, 「有効桁数が多い」とは限らない (つまり同じかもしれない).

  • joqr
  • ベストアンサー率18% (742/4026)
回答No.2

double の有効桁数は15桁 folat の有効桁数は7桁 です それ以上の桁を扱いたければ BCD演算でも使えばいいです >D[i]*D[i]を計算すると、やっぱりオーバーフローを起こしますでしょうか やってみる方が早いし、論より証拠です 単純に桁上がりがいくつかの問題です それは算数で考えていいと思います