アプリ版:「スタンプのみでお礼する」機能のリリースについて

十進ベーシックの組み込み関数の式の計算方法を知りたいです。

よろしくお願いします。
十進ベーシックを使用しています。
まだ初心者です。

その中にcosとか、sinとかsqrなどの組み込み関数がありますが、
ベーシックの裏で、cosは足し算、引き算、掛け算、割り算のみをもちいて、
どのようにcosの計算をしているのか知りたいと思います。

他の関数を自分でつくるときの参考にしたいと考えています。

どなたか、組み込み関数は実際にどのように計算されているのかご存知であれば、教えてください。
よろしくお願いします。

A 回答 (3件)

ここではマクローリン展開による計算方法が詳しく解説されています。


http://assam.cims.hokudai.ac.jp/~josch/workshop/ …

書籍の「C言語による最新アルゴリズム事典」では
連分数展開を使った三角関数のソースリストが紹介されています。
http://chaste.web.fc2.com/Reference.files/Algo.h …
http://oku.edu.mie-u.ac.jp/~okumura/algo/
掲載されているソースリストはここからダウンロードできます、この中の"trig.c"が三角関数のソースです。

実際の所は真面目に計算すると遅いので、内部的には1度とかもっと細かい角度で計算済の値をテーブル参照して高速化している場合が多いです。
(数値演算プロセッサやGPUでもテーブル参照はよく使われています)
    • good
    • 0
この回答へのお礼

お世話になります。

ダウンロードして、見せて頂きました。
私は十進ベーシックを初めてまだ一月くらいなのです。

cosの関数はおそらく、下記の抜粋した部分だと思うのですが、
正直、関数が全くわかりません。
私がしっているのは、let, for, input, print, if, then, next

くらいです。そこで、下記のプログラムが読めるように、勉強したいのですが、
関数の辞書?みたいなのはありますでしょうか?

おそらく/*というのは、メモのことですよね?
ちなみにこのプログラムの言語は、十進ベーシックでも動くのでしょうか?
それとも、C言語?なんでしょうか?その場合は、十進ベーシックのソフトでは動かないのでしょうか。

初心者でわからないことだらけですみませんが、cosがどのように計算されているのかを知りたいので、
下記のプログラムを読み解きたいと考えていますので、どうぞよろしくお願い致します。

long double lcos(long double x) /* cos(x) */
{
return lsin(PI / 2 - lfabs(x));
}

long double lcos1(long double x) /* 1 - cos(x) */
{
int k;
long double t;

t = ur_tan(lfabs(x / 2), &k); t *= t;
if (k % 2 == 0) return 2 * t / (1 + t);
/* else */ return 2 / (1 + t);
}

お礼日時:2010/11/03 22:12

前の回答がちょっと投げやりだったので、もう少し調べてみました。


C言語でテーラー展開でcosを計算する関数です

double COS(double x){
  double t;
  double y;
  int n;

  y = 1.0;
  t = 1.0;
  n = 1;
  while( 1 ){
    t = - t*x*x/((2*n)*(2*n-1));
    if (fabs(t) <= 0.000000001) break;
    y = y + t;
    n++;
  }
  return y;
}

これが十進ベーシックに変換した物です。

100 INPUT x
110 LET y=1.0
120 LET t=1.0
130 LET n=1
140 DO
150 LET t=-t*x*x/((2*n)*(2*n-1))
160 IF ABS(t) <= 0.000000001 THEN EXIT DO
170 LET y=y+t
180 LET n=n+1
190 LOOP
200 PRINT y
210 END

これでどうでしょうか。
    • good
    • 0

どうも質問者様の聞きたい事と相違があるみたいで


「十進ベーシックで内部関数と同じ計算をしてみたい」と言う質問だったのですか?

>十進ベーシックの組み込み関数の式の計算方法を知りたい
さすがに十進ベーシックの数学関数の中身までBASICでプログラムされていないと思います。
元はMS-DOS版からあるみたいですので十進ベーシックはC言語でプログラムされていると思います。
C言語なら数学関数は用意されているので、その中身の話をしたつもりです。
紹介したソースはC言語です、ポインタなどを多用しているので、あれをBASICに変換するのは面倒ですね。
元になるのは正接(tan)の計算関数"ur_tan"です。
正接(tan)が計算できれば正弦(sin)と余弦(cos)も計算できますね。

検索していたらBASICで逆三角関数を計算しているものを見つけたので、
こちらの方が参考になるでしょう。
http://hp.vector.co.jp/authors/VA005145/944basic …
こちらも十進ベーシックではないので書き換えが必要ですね。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!