
線形補間での求め方
問題文:
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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
数値を指数部と仮数部に分離したい
-
c言語で、繰り返し文の中で、0....
-
C 開放してるのにエラー(doubl...
-
プログラムでの数字につく”f”の...
-
C言語の型による処理速度の違い
-
C言語 関数プロトタイプ宣言の...
-
float型とdouble型の変数の違い...
-
doubleの変数にintとintの割り...
-
ガウスの掃き出し法によるC++プ...
-
C言語のプログラムで#include<m...
-
-1.#IND00と出てしまうのですが...
-
ceilでの切り上げ処理について
-
C言語(プログラミング)関連の質...
-
割り算ができない
-
3次方程式の求解プログラム(...
-
-1.#IND00 をデバッグしたい
-
与関数get_objの或る点におけ...
-
doubleは常に%lfとするべきなのか
-
C++で割り算の結果を昇順に出力...
-
C言語のマクローリン展開ローラ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プログラムでの数字につく”f”の...
-
C言語を実行すると-infが出てき...
-
doubleの変数にintとintの割り...
-
float型とdouble型の変数の違い...
-
c言語で、繰り返し文の中で、0....
-
至急です! マクロ定義で #defi...
-
C 開放してるのにエラー(doubl...
-
C言語の型による処理速度の違い
-
C言語 関数プロトタイプ宣言の...
-
float と double
-
ラグランジュの補間法のCプログ...
-
C言語のプログラムで#include<m...
-
c言語のコンパイルエラー canno...
-
2分法で方程式の複数の解を自...
-
2次方程式の解を求めるプログ...
-
C言語で台形公式を使った二重積...
-
Cプログラミングの問題です。ニ...
-
物体が往復する動きを作りたい
-
関数におけるif文とreturn文に...
-
doubleは常に%lfとするべきなのか
おすすめ情報