Math.sin( )メソッドについて

解決


toru  2009-04-13 05:35:03  No: 145840

Math.sin( )メソッドについてよく理解でないのですが、
やはり数学的な知識が必要なのでしょうか?


YuO  2009-04-13 05:53:28  No: 145841

Math.Sinは単純に,正弦関数sinの計算を行うだけのメソッドです。

あくまで数学関数を実行するだけのものですから,
正弦関数を知っていればMath.Sinが理解でいないことはないですし,
正弦関数を知らなければMath.Sinは理解できないでしょう。

そういう意味では数学的な知識が必要かもしれませんが,三角関数は初等数学の範囲内だと思いますし,それほど難しい知識ではないと思います。


aetos  2009-04-13 19:54:18  No: 145842

注意点として、引数はラジアンで与える必要があります。
360°= 2πラジアンですので、度をラジアンに変換するには、2π/360 をかければよいです。


aetos  2009-04-13 19:55:16  No: 145843

↑フォントによってはπがnに見えたりするかしら?
πはパイ、円周率です。.NET では Math.PI です。


ポチ  2009-05-10 23:37:35  No: 145844

>Math.sin( )メソッドについて
>Math.Sinは単純に,正弦関数sinの計算を行うだけのメソッドです。

こう書かれていることを否定するだけの根拠を羅列する知識はないのですが、

Math.Sin()は正弦関数sin()の値を得ることができる関数です。

では間違っているのでしょうか?


aetos  2009-05-11 19:00:45  No: 145845

よくわかりませんが、
> Math.Sin()は正弦関数sin()の値を得ることができる関数です。
という書き方は、根拠はないけれど
> Math.Sinは単純に,正弦関数sinの計算を行うだけのメソッドです。
を否定しているのですか?

個人的には同じに思えて、意味的にどこが違うのかわからないのですが。


ポチ  2009-05-13 07:41:45  No: 145846

>> Math.Sinは単純に,正弦関数sinの計算を行うだけのメソッドです。
>を否定しているのですか?

否定できるのであればしたい・・・
「計算を行うだけ」ではないので。

Math.Sinは単純に,正弦関数sinの計算を行って結果の値を返す関数です。

といいたいわけです。
Sinという関数名に値を返している以上は「関数」とよびたいです。

VBでいえば
Dim Sub XXX(・・・)

Dim Function YYY(・・・) As Double
というのが決定的な差ですよね。


shazbot  2009-05-13 08:48:48  No: 145847

よくわからない話ですが、wikipediaでみるかぎり、「メソッド」の定義から察するに、この場合は「メソッド」でも正解のような気がします。

ところで質問者はおそらく、学校で配られたプリントをみて、大して興味もないプログラミングを他力本願で済ますために書いたといったところでしょうか?
質問は結構だと思いますが、高校1年の数学くらいは知らないとこの先進めないかと思いますよ。がんばってください。


YuO  2009-05-13 19:53:21  No: 145848

> 「計算を行うだけ」ではないので。

「行うだけではない」とは?

まあ,実際問題として参照用のソースコードを見ると
> [MethodImplAttribute(MethodImplOptions.InternalCall)]
> public static extern double Sin(double a); 
となっているので,内部で何やっているのかはわからないのですが。

> Sinという関数名に値を返している以上は「関数」とよびたいです。

.NET Frameworkにおいて,System.Math.Sinは「メソッド」と呼ばれます。
http://msdn.microsoft.com/ja-jp/library/system.math.sin.aspx

とりあえず,MSDNの「クラス、プロパティ、フィールド、およびメソッド」
http://msdn.microsoft.com/ja-jp/library/a67b72ea.aspx
を読んでください。

> VBでいえば
> Dim Sub XXX(・・・)
> か
> Dim Function YYY(・・・) As Double
> というのが決定的な差ですよね。

戻り値の型がSystem.Voidかそうでないかだけの差です。
Public Shared Sub Test → .method public static void  Test() cil managed
Public Shared Function Test() As Integer → .method public static int32  Test() cil managed

なお,区別するなら
・Sub XXXはSubプロシージャ
・Function YYYはFunctionプロシージャ
です。
http://msdn.microsoft.com/ja-jp/library/sect4ck6.aspx
http://msdn.microsoft.com/ja-jp/library/dz1z94ha.aspx

ところで,Dim Sub XXXとかDim Function YYYなんて構文ないはずですが……。
http://msdn.microsoft.com/ja-jp/library/7ee5a7s1.aspx


ポチ  2009-05-13 21:00:51  No: 145849

いろいろありがとうございました。
これから「関数」という言葉は使わないことにします。


aetos  2009-05-13 21:09:33  No: 145850

計算を行うだけではなく、計算を行い、かつ、その値を返すことをしている、ということですか。
「計算を行うだけ」では結果を返さないことになってしまうから、と。
ただ、計算を行って結果を返さないなどということはまずあり得ませんから、いちいち「値を返す」と書く必要はないと考えます。
それに、厳密に言えば計算をしているとも限りませんし…表引きしているかもしれませんよね。

名前にこだわるのであれば、「メソッド」が正式名称でしょう。
プログラミング用語の「関数」は俗称で、必ずしも数学の用語の定義とは一致しませんし。


aetos  URL  2009-05-13 21:11:57  No: 145851

> これから「関数」という言葉は使わないことにします。

適材適所で使ってください。
.NET Framework では、値を返すものも返さないものも「メソッド」ですが、C 言語ではどちらも「関数」と呼びますし、値を返すものは「関数」、返さないものは「手続き」と呼び分ける言語もあります。


陸羽  2009-07-19 11:11:39  No: 145852

最初の子の書き込みがないね。
僕は中2レベルの算数しかできないけど。
sinとかのアレはクラスでしょ。たぶん。
コレ以前に作ったんで、遊んでね。
Option Strict On
'VisualBasic2008
Public Class Form1
    Sub New()
        ' この呼び出しは、Windows フォーム デザイナで必要です。
        InitializeComponent()
        ' InitializeComponent() 呼び出しの後で初期化を追加します。
        'PIは3.14159です
        StartPosition = FormStartPosition.CenterScreen
        Size = New Size(300, 300)
    End Sub
    Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Timer1.Interval = 300
        Timer1.Start()
    End Sub

    Sub 針です(ByVal g As Graphics, _
          ByVal 針の長さ As Integer, _
          ByVal 角度 As Integer, _
        ByVal 色 As Pen)
        Dim x As Integer = CInt(針の長さ * Math.Cos(角度 * Math.PI / 180))
        Dim y As Integer = CInt(針の長さ * Math.Sin(角度 * Math.PI / 180))
        g.DrawLine(色, CInt(Width / 2), CInt(Height / 2), CInt(Width / 2 + x), CInt(Height / 2 + y))
    End Sub

    Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
        Dim 針の長さ As Integer
        '秒針
        針の長さ = Now.Second * 6 + 270
        針です(e.Graphics, CInt(Height / 3), 針の長さ, Pens.Black)
        '分針
        針の長さ = Now.Minute * 6 + 270
        針です(e.Graphics, CInt(Height / 4), 針の長さ, Pens.Aqua)
        '時針
        Dim 時針 As Integer = Now.Hour
        針の長さ = (時針 * 30 + 270) + 時針 \ 2
        針です(e.Graphics, CInt(Height / 6), 針の長さ, Pens.Red)
    End Sub

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        'Timer1をフォームにドラッグしてね
        Me.Invalidate()
    End Sub
End Class


ポチ  2009-07-19 12:15:06  No: 145853

>最初の子の書き込みがないね。

その「最初の子」なんですが、解決し忘れてましたね。
あれからすべてメソッドで通しています。
いろいろありがとうございました。

P.S.  ザコキャラ(最後のヤツ)の意見は確かにやくにたちません。
      たぶんすべてにおいて中2レベル(あるいはそれ未満)なんでしょう。


陸羽  2009-07-20 05:24:18  No: 145854

ココ飽きたよ。
じゃ〜な。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加