teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

4

コードが見にくかったので修正。

2016/03/27 08:14

投稿

manman
manman

スコア233

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
- return '0.5'
14
+ when 30, 150 ; return '0.5'
17
- when 90
18
- return '1'
15
+ when 90 ; return '1'
19
- when 210, 330
20
- return '-0.5'
16
+ when 210, 330 ; return '-0.5'
21
- when 270
22
- return '-1'
17
+ when 270 ; return '-1'
23
- else
24
- return sin(BigDecimal(PI(m) * n / 180), m).to_s('F')[0..m]
18
+ else ; return sin(BigDecimal(PI(m) * n / 180), m).to_s('F')[0..m]
25
19
  end
26
20
  end
27
21
 

3

コードの修正。

2016/03/27 08:14

投稿

manman
manman

スコア233

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 {|x|
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

コメントの消去

2016/03/27 08:06

投稿

manman
manman

スコア233

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

有理数の条件について言及。

2016/03/27 07:50

投稿

manman
manman

スコア233

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'