下記のようなプログラムを作っています。
int num = 1000;
double d1 = 12345.6;
double d2 = 0.0:
for(int i=0;i<num;i++){
d2 += Math.pow(d1,(double)i);
}
d2の値を求めたいのですが、これをこのまま実行すると、得られる数値が大きすぎてd2の値がInfinityになってしまいます。
小数を格納できる最大の型はdouble型ですよね?
それに収まりきらないということは、私の求めたい数値はJavaでは求めることが出来ないのでしょうか?
それとも何かInfinityになってしまうのを回避する手段はあるのでしょうか?
d2で得られた値はそのまま他の計算式で利用するのでどうしてもすべて小数値でなくてはならないのです。
どなたかお知恵をお貸しください。
よろしくお願いします!!
No.3ベストアンサー
- 回答日時:
加減乗除などの基本的な演算しか使えませんが、java.math.BigDecimalというクラスを使うと、どんな大きな/小さな小数も扱えます。
また、java.math.BigIntegerクラスでは、どんな大きな整数も扱えます。こちらは、累乗や余りの計算など、BigDecimalより多少多くの機能があります。
ところで、1番目の型がおっしゃる long double という数値型は、Javaにはありません。プリミティブ値では double が限界です。
やはりBigDecimalクラスですか!
この質問を書き込む前にJava関連のHPを探したところ、そのクラスのことが少しだけ書いてあったのですが、今まで使ったことがないもので利用方法が分からず断念してしまいました。
今回は整数部分をlong、小数部分をdoubleに別々に格納することによって何とか対処することができました。
今後のためにも、これからBigDecimalクラスの利用法の学習をしたいと思います。
ありがとうございました!
あと余談なんですが、一番目の方がおっしゃってたのはもしかしてC言語だったのでしょうか?(笑)
No.2
- 回答日時:
プリミティブ型の限界値を越しているのは確かなんでしょうね。
私が限界値を突破してしまう数値計算をしなければならないとき取った方法を一応書きますと
数値をString型に格納するようにしました。
そいでString型渡しで四則演算できる関数を用意して
(中では一桁ずつプリミティブ型に収まりきる程度の値に分割して、少しずつ計算して答えを他のStringに格納、これ繰り返して最後にまた少しずつ答えを足していきました)
越えてしまう数字を計算する。
って方法でやりくりましたよ。
速度は言うまでもなく遅いですけどね(--;
それでは(^-^/~~
String型の利用ですか~。
私も少し考えたんですが、やはりその方法でも何とかコーディングできたんですね。
ただ道のりがかなり長そうですが・・・(^^;
今回は整数部分をlong、小数部分をdoubleに別々に格納することによって何とか対処することができました。
-sou-さんのご意見も、大変参考になりました。
ありがとうございました!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
プログラミング
-
べき乗
-
doubleとintの違い
-
四捨五入
-
実数 2.0 に対して int(2.0) ==...
-
Javaによる利率計算の実装方法
-
java プログラム 範囲を指定し...
-
0dの意味を教えてください
-
Javaで何パーセント%かを表示...
-
double型の足し算について
-
[JAVA]try 内の変数を外で!?
-
VBAで配列の計算
-
【Java8以降】csvファイルの複...
-
プログラミングの問題です。大...
-
Java配列でNullPointerExceptio...
-
オブジェクトの中のプロパティ...
-
JPanelの切り替えと再描画
-
Java 読み込んだテキストファイ...
-
eclipseでコンソールのピン留め...
-
JAVA 文字色変更
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
実数からの小数部の取得
-
0dの意味を教えてください
-
べき乗
-
Javaで何パーセント%かを表示...
-
JAVAのプログラムで、2乗計算...
-
分を表す数値(int型)を、小数...
-
double型変数値の整数部分のみ...
-
javaの課題。。
-
javaで1.8x10の308乗÷...
-
少数50桁以上を表示するには
-
double型の足し算について
-
doubleについて
-
Javaコンパイルエラー
-
手入力された値を0.5区切りに変...
-
数値積分について
-
最大値と最小値の求め方
-
最大値を求めるプログラム
-
Javaのeval関数処理
-
javaでC++のdefine文に相当する...
-
Java math.powメソッド
おすすめ情報