![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
ライプニッツの公式により、円周率の近似値を求めるプログラムを作 成しなさい。ただし、この公式は収束が遅い。
1 1 1 1 1 1 1 1
円周率=4(── - ── + ── - ── + ── - ──+…- ──+──)
1 3 5 7 9 11 47 49
ってやつをJAVAでやるのですが自分で作ったのは
class en{
public static void main(String argv[]) {
int i;double n,o,p,q,r;
n=0;o=0;p=0;q=0;r=0;
for (i=1; i<=49; i=i+4) {
n=1/i;
o=o+n;
}
for (i=3; i<=47; i=i+4) {
p=1/i;
q=q+p;
}
r=4*(o-q);
System.out.println("円周率="+r);
}
}
なんですが
結果が円周率=4.0になってしまいます。アドバイスをお願いします
No.4ベストアンサー
- 回答日時:
補足というか訂正です。
>実数と整数を使った計算をする場合は・・・
というのは正しい説明ではなかったです、申し訳無い。
「整数値と整数値を使った計算をする場合」に訂正さ
せてもらいます。
n=1/i ;
の右辺、1/i はどちらも、整数値です。
よって小数点以下は切り捨てになります。
小数点以下を含む計算を望む場合は、どちらかを
実数値にすればいいので。。。
n=1.0/i ;
n=1/(double)i ;
のどちらかにすれば良いと思います。
No.5
- 回答日時:
こんにちは。
つまらないことで支障があるかはわかりませんが、一つ気になったとこがあるので。
double n,0,p,q,r を 0 で初期化しているようですが、0.0 にやるのが一般的です。
こうしないとまずいとか本で書いてあったような気が…たしか。
double型の答えを出すなら double/double という形にしないといけません。
上のやり方だとそれになってないようなので。
例えば上の for の部分を
for (double i = 0.0; i < 49.0; i+=4.0) {
o += 1.0 / i;
}
for (i = 3.0; i < 47.0; i+=4.0) {
q += 1.0 / i;
}
とすればいいかと。
間違ってたらごめんなさいね。
No.3
- 回答日時:
問題は、変数 i にあります。
これをint(整数型)にしてしまうと、
n=1/i;
のdouble(実数型)n には右辺 1/i の小数点数
切捨て値が入る事になります。
こういった実数と整数を使った計算をする場合は
整数型の方を実数型へキャストしなければなりま
せん → n=1/(double)i ;
それか、i を実数型として宣言するかですね。
No.2
- 回答日時:
もっと短くなるのじゃないでしょうか。
VBAでやりましたが、JAVAに置換えました。
Sub test01()
Dim p(101)
p(1) = 1
For n = 2 To 100
p(n) = p(n - 1) + ((-1) ^ (n - 1)) / (2 * n - 1)
Cells(n, 1) = p(n)
Next n
Cells(n, 1) = 4 * p(n - 1)
End Sub
3.131592904になりました。
<Java>
class en1{
public static void main(String args[]) {
int n;
double p[];
p=new double[101];
p[1] = 1;
for(n = 2;n<101;n=n+1){
p[n] = p[n - 1] + Math.pow((-1) , (n - 1)) / (2 * n - 1);
System.out.println(p[n]);
}
System.out.println("円周率="+ 4.0 * p[n - 1]);
}
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java Java プログラム public class Main { public static void 3 2023/08/10 23:46
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- Ruby 【JAVA】数字をひし形に出力するプログラムについて 2 2022/07/11 23:32
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- Visual Basic(VBA) VBAプログラム初心者です。 以下の問題のプログラムを表記してみたのですが、実行するためには、どこを 4 2023/01/19 20:04
- その他(プログラミング・Web制作) 大学一年でVBAのプログラミングを勉強しているものです。来週の情報の授業で以下の問題のプログラムを勉 4 2023/01/19 16:15
- Java 直し方について教えて頂きたいです。 4 2022/08/13 02:11
- Java Java 配列<選挙> 4 2023/07/31 15:07
- C言語・C++・C# Cのdoubleの浮動小数点表示について 3 2023/04/17 13:14
- 計算機科学 円周率のミスの発見について 3 2022/10/30 10:52
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
0dの意味を教えてください
-
Javaで何パーセント%かを表示...
-
べき乗
-
実数からの小数部の取得
-
Java言語プログラミングについ...
-
Double.parseDoubleの使い方
-
JAVAのプログラムで、2乗計算...
-
double型変数値の整数部分のみ...
-
最大値を求めるプログラム
-
プログラムのおかしいところを...
-
最大値と最小値の求め方
-
オブジェクトの中のプロパティ...
-
System.err. printlnとSystem.o...
-
ORA-01858: 数値を指定する箇所...
-
C言語のポインターに関する警告
-
JSPやサーブレットでSystem.out...
-
ダブルクォーテーションを含む...
-
Path型をString型へ変換する(Java)
-
C言語 重複しない4ケタの乱数...
-
[JAVA]try 内の変数を外で!?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
べき乗
-
実数からの小数部の取得
-
Javaで何パーセント%かを表示...
-
0dの意味を教えてください
-
最大値と最小値の求め方
-
double型変数値の整数部分のみ...
-
Javaによる利率計算の実装方法
-
doubleで入力するには?
-
doubleとintの違い
-
JAVAのプログラムで、2乗計算...
-
double型の足し算について
-
掛け算演算を使わない掛け算
-
実数 2.0 に対して int(2.0) ==...
-
Javaコンパイルエラー
-
java のfor文について質問です。
-
C# ToStringでの数字桁揃えの仕方
-
java プログラム 範囲を指定し...
-
Javaのeval関数処理
-
printfでのエラーがわからない...
-
数値積分について
おすすめ情報