電子書籍の厳選無料作品が豊富!

初心者で申し訳ないのですが、
今、
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よりも有効桁数のある型とかがあるのでしょうか?

すみませんが、アドバイスお願いします。

A 回答 (3件)

提示された値の2乗程度の値は、


double型が扱える範囲(およそ10の308乗)に
じゅうぶん収まります。
    • good
    • 0

オーバーフローの問題を回避するだけなら hypot を使えばいいんだけど, それとは別に「とりあえず絶対値最大の数値ですべてを割ってから考える」のがセオリーじゃないかなぁ. どうせ最終的には「ここの値の比率」だけが問題なんだから.


ちなみに「double より有効桁数のある型があるかどうか」は処理系依存. 厳密に言うと「double より有効桁数の少なくない型」として long double はありますが, 「有効桁数が多い」とは限らない (つまり同じかもしれない).
    • good
    • 0

double の有効桁数は15桁


folat の有効桁数は7桁 です

それ以上の桁を扱いたければ BCD演算でも使えばいいです

>D[i]*D[i]を計算すると、やっぱりオーバーフローを起こしますでしょうか
やってみる方が早いし、論より証拠です
単純に桁上がりがいくつかの問題です
それは算数で考えていいと思います
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!