質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.49%

  • C

    3707questions

    C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

artanとfor文を用いて円周率を求める方法

受付中

回答 3

投稿

  • 評価
  • クリップ 0
  • VIEW 169

ShshJshs

score 1

 前提・実現したいこと

arctanとforを用いて円周率を求めるプログラムを作りたいです。
そして数学ライブラリーによる円周率と自分で作った値を較べたいです。

 発生している問題・エラーメッセージ

4*atan(1) = 3.141592653589793
4*myatan(1) = 0.000000000000000

 該当のソースコード

include <stdio.h>
include <math.h>

double myatan(double x){
int k, N=10;
double Sum = 0.0;
for(k=0;k<=N;k++){Sum = Sum+(-1^k)/(2*k+1);
}
return 0;
}

int main(void){
printf("4*atan(1) = %.15f\n",4*atan(1.0));
printf("4*myatan(1) = %.15f\n",4*myatan(1.0));
return 0

 試したこと

自分の作った計算式が表示されず、困っています。

 補足情報(FW/ツールのバージョンなど)

UNIXを使った端末からのC言語です。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

0

myatan関数の引数のxはどこにも使用されてませんが。

また、

Sum = Sum+(-1^k)/(2*k+1);

はどういう計算式なんでしょうか


おまけにmyatanは

return 0;

で終わってるし

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/06/21 12:17

    計算式に関しては原理は理解したんですけど、それをどう計算式で表すのかわからず、当てずっぽうで出た計算式です。
    return 0に関してはあまり理解できていません

    キャンセル

  • 2018/06/21 12:28

    return の後ろは計算結果を置きます
    これだと、中でどんな計算をしようが、0しか返しません
    で、どんな原理で計算させようと思ったんでしょうか

    キャンセル

  • 2018/06/21 12:38

    arctan(1) = π/4 であることから
    4*arctan(1) = π から
    arctan(x)を級数展開を用いて計算式を作り
    for文でループさせ円周率を求めようとしてました
    原理は一応テイラー展開からなんですけど、完全に理解したわけではにあですが。

    キャンセル

  • 2018/06/21 12:45

    C言語では^という演算子は、XORの演算子です。
    累乗を意味するものではないんですね

    キャンセル

  • 2018/06/21 12:50

    なるほど、そしたら計算式の中でfor文をまた用いて累乗を計算するって言うことで間違えないですか?

    キャンセル

  • 2018/06/21 12:52

    それをするための関数、 pow 関数というのがあります
    http://www.orchid.co.jp/computer/cschool/CREF/pow.html

    キャンセル

0

色々突っ込みどころはあるのですがまず式がおかしいです。
任意の項について、

(-1^k)/(2*k+1);

CとC++では"^"この演算子はべき乗になりません。powを使ってください。
あとテイラー展開って言えばテイラー展開ですがこれマクローリン展開じゃないですか?
あと引数double xが何をしたいのかよくわかりません。
定数を返すならvoidです。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

こんにちは

 質問欄にあるコードを見てきになったこと

関数myatanでfor文でNまでの項を足していますがこのNは定数なのでintではなく
.#define N 10 などにすべきです。


また、関数myatanの引数xは以下の等式のxだと思われます。

イメージ説明

 ちなみに

このソースコードをもとに実際に計算すると分かりますが、収束が非常に遅いです。
今回は「マチンの公式」を使いました。収束が非常に速いです。
詳しくは円周率の求め方をご覧ください。

イメージ説明

以下、今まで述べた分のソースコードを載せておきます。

#include <stdio.h>
#include <math.h>

#define N 10

double my_atan(double);

double my_atan(double x)
{
    int k;
    double sum = 0.0;

    for(k = 0; k < N; k++){
        sum += pow(-1.0,k) / (2 * k + 1) * pow(x,k * 2 + 1);
    }
    return sum;
}

int main(void)
{
    printf("4 * atan(1) = %.15f \n", 4 * atan(1.0));
    printf("4 * my_atan(1) = %.15f \n",4 * my_atan(1.0));
    printf("マチンの公式を使ってみる\n");
    printf("atanを使用%.15f\n",(4 * atan(0.2) - atan(1 / 239.0)) * 4);
    printf("自分で作ったmy_atanを使用:%.15f\n",(4 * my_atan(1 / 5.0) - my_atan(1 / 239.0)) * 4);

    return 0;
}


計算すると分かりますが、マチンの公式を使うとわずか10項まででここまで円周率に近づきます。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/06/21 18:11

    arctanxのマクローリン展開で収束半径が1であり-1 < x < 1と書いてありますが、
    x = 1の時の右辺はライプニッツの交代級数となり収束するので大丈夫です。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.49%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • C

    3707questions

    C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。