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

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

新規登録して質問してみよう
ただいま回答率
85.44%
C

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

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

1回答

746閲覧

誤差の求め方がわからない

opopopop

総合スコア5

C

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

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2023/04/28 10:31

実現したいこと

誤差の計算、表示

前提

関数y=x^3-4x+1のa<=x<=bをn分割した際の最小値を求めるプログラムを書きました。
このコードの最後に、解析値と実際の値の誤差を計算し表示したいのですが、どうしたら良いかわかりません。

該当のソースコード

#include<stdio.h> #include<math.h> #include<stdlib.h> int main(int argc,char* argv[]){ if(argc != 4){ fprintf(stderr,"引数の数が違います\n"); exit(1); } float a = atof(argv[1]); float b = atof(argv[2]); int n = atoi(argv[3]); float min; float x = a; float delta = (b-a)/n; for(float i=a;i<=b;i+=delta){ float y = (i*i*i)-(4*i)+1; if(min>y){ min = y; x = i; } else{ min = min; x = x; } } printf("[x,y] = [%.4f,%.4f]\n",x,min); return 0; }

試したこと

表示する値と実際の値の誤差を調べるので、minの桁数を指定して演算できないかと思ったのですができませんでした。

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

melian

2023/04/28 22:09

x の範囲([a, b]) に依りますが、a > -2.3094, b > 1.1547 の場合(極小値点を含む)は、以下の式で求めることができるかと思います。(精度的に float よりは double や binary128 の方がよいかとは思いますが) min - (sqrt(4.0/3.0) * (4.0/3.0 - 4.0) + 1.0)
actorbug

2023/04/29 00:04 編集

例えば、「関数y=x^3-4x+1の1<=x<=2を10分割した際の最小値」の「実際の値」とは、以下のどれですか? 1. -2.072 (x=1.2の場合のyの値) 2. 1.2 ^ 3 - 4 * 1.2 + 1 をfloatの誤差ありで計算した結果 3. 1 - (16√3)/9 (x=(2√3)/3の場合のyの値) 4. 1 - (16√3)/9 をfloatの誤差ありで計算した結果 5. その他 floatでは1.2を正確には表現できないので、1.と2.は異なります。 また、√3は無理数なので、3.と4.も異なります。 もし、上記の答えが1.で、解析値の桁数指定で1.を求めることができると考えているのなら、それは間違いです。 分割数が10ではなく9の場合を考えれば、間違っていることが分かると思います。
guest

回答1

0

ベストアンサー

表示する値と実際の値の誤差を調べるので、minの桁数を指定して演算できないかと思ったのですが

いいえ、単に差(の絶対値)を取ればいいです

例えば1が理論値で解析値が1.1だったら
通常、誤差と呼ばれるものは0.1です。
もちろん、指定がある場合はその通りに求めます

投稿2023/04/28 21:41

編集2023/04/28 21:57
ozwk

総合スコア13544

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.44%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問