回答編集履歴
4
コードが見にくかったので修正。
answer
CHANGED
@@ -10,18 +10,12 @@
|
|
10
10
|
def sin_deg(n, m = 100)
|
11
11
|
k = n % 360
|
12
12
|
case k
|
13
|
-
when 0, 180
|
14
|
-
return '0'
|
13
|
+
when 0, 180 ; return '0'
|
15
|
-
when 30, 150
|
16
|
-
|
14
|
+
when 30, 150 ; return '0.5'
|
17
|
-
when 90
|
18
|
-
|
15
|
+
when 90 ; return '1'
|
19
|
-
when 210, 330
|
20
|
-
|
16
|
+
when 210, 330 ; return '-0.5'
|
21
|
-
when 270
|
22
|
-
|
17
|
+
when 270 ; return '-1'
|
23
|
-
else
|
24
|
-
|
18
|
+
else ; return sin(BigDecimal(PI(m) * n / 180), m).to_s('F')[0..m]
|
25
19
|
end
|
26
20
|
end
|
27
21
|
|
3
コードの修正。
answer
CHANGED
@@ -25,14 +25,24 @@
|
|
25
25
|
end
|
26
26
|
end
|
27
27
|
|
28
|
+
p sin_deg(2)
|
29
|
+
p sin_deg(2r / 3)
|
30
|
+
p sin_deg(2.4)
|
31
|
+
p sin_deg(180)
|
32
|
+
|
28
33
|
puts
|
29
|
-
13.times
|
34
|
+
13.times{|x|
|
30
35
|
deg = 30 * x
|
31
36
|
p "#{deg} -> #{sin_deg(30 * x, 20)}"
|
32
37
|
}
|
33
38
|
```
|
34
39
|
|
35
40
|
出力結果
|
41
|
+
"0.034899496702500971645995181625332937354824576043296871425005766942084051213821325451123151459028565"
|
42
|
+
"0.011635265801397014602667654994549171911797803980910040236314916774919405972045591895078598117351329"
|
43
|
+
"0.041875653729199629552835351557732683223252479096878867471484088777896653959256704844944845828278283"
|
44
|
+
"0"
|
45
|
+
|
36
46
|
"0 -> 0"
|
37
47
|
"30 -> 0.5"
|
38
48
|
"60 -> 0.8660254037844386467"
|
2
コメントの消去
answer
CHANGED
@@ -7,7 +7,6 @@
|
|
7
7
|
require 'bigdecimal/math'
|
8
8
|
include BigMath
|
9
9
|
|
10
|
-
# sin(n) の値を m 桁の文字列で返す。
|
11
10
|
def sin_deg(n, m = 100)
|
12
11
|
k = n % 360
|
13
12
|
case k
|
1
有理数の条件について言及。
answer
CHANGED
@@ -1,4 +1,7 @@
|
|
1
1
|
katoy さんの回答をもとに以下のようにしてみました。
|
2
|
+
sin(a/b π) が有理数になるのは自明な時
|
3
|
+
(http://note.chiebukuro.yahoo.co.jp/detail/n3993)
|
4
|
+
しかないのでこれでいいでしょう。
|
2
5
|
|
3
6
|
```ruby
|
4
7
|
require 'bigdecimal/math'
|