回答編集履歴

3

BigDecimalの取得

2020/05/02 01:53

投稿

swordone
swordone

スコア20651

test CHANGED
@@ -24,7 +24,7 @@
24
24
 
25
25
  for (int i = 0 ; i < 3 ; i++) {
26
26
 
27
- array[i] = new BigDecimal(scan.next());
27
+ array[i] = new BigDecimal(scan.next());
28
28
 
29
29
  }
30
30
 
@@ -49,3 +49,51 @@
49
49
  }
50
50
 
51
51
  ```
52
+
53
+ 追記:改めて調べてみたら、Scannerで直接BigDecimalを取得できたので変更
54
+
55
+ ```java
56
+
57
+ import java.util.Scanner;
58
+
59
+ import java.math.BigDecimal;
60
+
61
+
62
+
63
+ public class ClassifyingToys{
64
+
65
+ public static void main(String[] args){
66
+
67
+ Scanner scan = new Scanner(System.in);
68
+
69
+
70
+
71
+ BigDecimal[] array = new BigDecimal[3];
72
+
73
+ for (int i = 0 ; i < 3 ; i++) {
74
+
75
+ array[i] = scan.nextBigDecimal();
76
+
77
+ }
78
+
79
+ int result = array[2].pow(2).compareTo(array[0].pow(2).add(array[1].pow(2)));
80
+
81
+ if(result < 0){
82
+
83
+ System.out.println(" : acute-angled");
84
+
85
+ }else if(result == 0){
86
+
87
+ System.out.println(" : right-angled");
88
+
89
+ }else{
90
+
91
+ System.out.println(" : obtuse-angled");
92
+
93
+ }
94
+
95
+ }
96
+
97
+ }
98
+
99
+ ```

2

説明追加

2020/05/02 01:53

投稿

swordone
swordone

スコア20651

test CHANGED
@@ -1,4 +1,8 @@
1
- コンピュータは10進数の小数を正確に表現できません。分母が2の累乗になるような既約分数(1/2,3/4など)以外は誤差が生じます。10進数計算を正確に行いたいなら、BigDecimalを使など方法になりま
1
+ コンピュータが扱う2進数で、ほとんどの10進数の小数を正確に表現できません。分母が2の累乗になるような既約分数(1/2,3/4など)以外は誤差が生じます。辺の詳細は→[double,float型とBigDecimalクラスは何がど違うか?](https://teratail.com/questions/172535#reply-256899)
2
+
3
+ 0.03,0.04,0.05をdoubleに変換した時点で誤差が生じており、それぞれの2乗計算ではその誤差が累積するため、直角になる条件である「引き算の結果がちょうど0」は満たせません。整数と一致するdoubleであれば誤差が生じないので成立しますが。
4
+
5
+ 10進数の計算を正確に行いたいなら、BigDecimalを使うなどの方法になります。
2
6
 
3
7
  ```java
4
8
 

1

カッコが足りなかった

2020/05/01 18:54

投稿

swordone
swordone

スコア20651

test CHANGED
@@ -24,7 +24,7 @@
24
24
 
25
25
  }
26
26
 
27
- int result = array[2].pow(2).compareTo(array[0].pow(2).add(array[1].pow(2));
27
+ int result = array[2].pow(2).compareTo(array[0].pow(2).add(array[1].pow(2)));
28
28
 
29
29
  if(result < 0){
30
30