線形補間での求め方
問題文:
1.数値を読み込む
2.xを読み込む
3.x<x1 または x>xnならエラー
3.x1<x<i+1 となるiを見つける
4.補間公式でyを求める
5.結果をプリントする
#include<stdio.h>
float hokan(void);
int xn[] = {0,5,10,15,20,25,30,35,40,45,50,55,60,65,70,75};
double yn[] = {0.000,0.087,0.173,0.258,0.342,0.422,0.500,0.573,
0.624,0.707,0.766,0.819,0.866,0.906,0.939,0.965};
int x=5;
void main()
{
printf("y = %lf\n", hokan());
}
float hokan(void)
{
int i;
double y;
if(x <0|| 75<= x){
printf("エラーです\n");
}
else{
for(i=0; xn[i] < x; i++)
y = (yn[i+1] - yn[i]) * (x - xn[i]) / (xn[i+1] - xn[i]) + yn[i];
return y;
}
}
数表を最初にxnとynで表記しています。
このプログラムで線形補間が行われてないそうなのですが・・
何か誤りがある様でしたらどなたか教えてください。
No.1ベストアンサー
- 回答日時:
>数表を最初にxnとynで表記しています。
>このプログラムで線形補間が行われてないそうなのですが・・
どなたかに言われたのですか?。
その方は、x = 5; と「数表」にある既知の値(線形補間不要)を用いているから、そのことを揶揄して言ったのでは・・。
☆ご自分で、「数表」にない値(例えば、x = 3 )で実行し、電卓での結果と比較してみては如何でしょう。
恥ずかしながら・・課題提出の時に言われました。
もう期限は過ぎてるのですが、一応完全な形で出しておきたいと思い
こちらに質問させていただきました。
最初の方と一緒にあわせて考えてみます。
ありがとうございます
No.2
- 回答日時:
まずプログラムのことに関してですが、x,xn[]とy,yn[]でサイズが異なるのですが、計算上危険なようなのでキャストするなりして型を統一したほうがいいです。
hokan()戻り値の設定がfloatで宣言しているのに、double型で返したら期待する結果は戻ってきません。
型とかを無視して机上で計算した結果は0.087でしたが、bubunnさんの実行結果はどうでしたか?
この場合ですが、x==5ということもありループ内の処理は配列の要素が[0]の時だけしか動いていません。
継続条件:xn[i]<x
1回目 0<5なので成立→補間計算。
2回目 5<5なので不成立→ループ内の処理は行われず最後のyの値にてリターン。
配列のiは0しか実行できないのでyn[0]==0.000ですしxn[0]==0です。
したがって(型は無視します。)計算すると
y=(0.087-0)*(5-0)/(5-0)+0.000
計算式の優先度順に計算すると
y=0.435/5+0.000
y=0.087+0.000
y=0.087
となります。
もしこれ以外の結果になる場合はdoubleとintの型が合っていないので想定し得ない結果になっているという理由です。(理由は処理系内では10進で演算していないためです。)
まずは型の見直し、補間条件x=5が妥当か?調べてみてください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 工学 Pythonの3Dグラフ表示に関する質問です。 1 2022/12/06 15:03
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# c言語でユーザ関数を利用して複素数のべき乗と絶対値の数列を計算するプログラムが作りたいです。 3 2023/01/29 22:13
- C言語・C++・C# Cのdoubleの浮動小数点表示について 3 2023/04/17 13:14
- C言語・C++・C# C言語の課題が出たのですが自力でやっても分かりませんでした。 要素数がnであるint型の配列v2の並 3 2022/11/19 17:41
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# C言語 3 2022/11/09 13:27
- 数学 京都大学教授が証明。 「ABC予想・宇宙際タイヒミューラー予想」を、ザックリで説明お願致出来ますか? 1 2022/04/11 20:52
- C言語・C++・C# C言語: ポインタ 5 2022/06/01 08:33
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
float型とdouble型の変数の違い...
-
プログラムでの数字につく”f”の...
-
C 開放してるのにエラー(doubl...
-
C言語を実行すると-infが出てき...
-
たくさんの数の平均を求める方...
-
doubleの変数にintとintの割り...
-
2次方程式の解を求めるプログ...
-
C言語
-
三角形OABの面積を求めるプ...
-
C言語 関数プロトタイプ宣言の...
-
c言語のプログラミングについて...
-
c言語で、繰り返し文の中で、0....
-
関数におけるif文とreturn文に...
-
C言語の型による処理速度の違い
-
c言語のコンパイルエラー canno...
-
C言語で直角三角形の斜辺を求め...
-
C++で外積
-
double型とint型で三分の一乗の...
-
EXE1→DLL→EXE2数値を受け渡す方法
-
C言語初心者 構造体 課題について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プログラムでの数字につく”f”の...
-
float型とdouble型の変数の違い...
-
doubleの変数にintとintの割り...
-
C言語を実行すると-infが出てき...
-
C 開放してるのにエラー(doubl...
-
至急です! マクロ定義で #defi...
-
c言語で、繰り返し文の中で、0....
-
関数におけるif文とreturn文に...
-
C言語 関数プロトタイプ宣言の...
-
C言語初心者 構造体 課題について
-
C言語の型による処理速度の違い
-
Cで3乗根を求める方法
-
C言語で-23乗を取り扱うには
-
2分法で方程式の複数の解を自...
-
doubleは常に%lfとするべきなのか
-
c言語のコンパイルエラー canno...
-
C言語で直角三角形の斜辺を求め...
-
C言語のプログラムで#include<m...
-
int とdoubleの比較
-
C++で外積
おすすめ情報