C言語の二次方程式の桁落ち回避の課題です.
エラーは出ないしおよそ値は合っているのですが,課題の指示でfloat型では通常の解の公式では精度が著しく落ちることを確認せよ,とあるのに値が変わりません.これはどこかミスしているのでしょうか?
以下がコードです.a=1,b=200,c=1で確認せよ,との指示です.
C
1#include<stdio.h> 2 3int func(int a,int b, int c, float *p01, float *p02, float *p11,float *p12); 4 5int main (){ 6 float ans01, ans02, ans11, ans12; 7 printf("float________________________________"); 8 func(1,200,1, &ans01, &ans02, &ans11, &ans12); //ans[0通常,1桁落ち回避][解の番号] 9 printf("\n\n ans01=%f, ans02=%f \n",ans01,ans02); 10 printf("\n\n ans11=%f, ans12=%f \n\n",ans11,ans12); 11 return 0; 12 } 13 14int func(int a,int b, int c, float *p01, float *p02, float *p11,float *p12){ 15 float ans01,ans02,ans11,ans12; 16 //通常 17 ans01=(-b+sqrt(b*b-4*a*c))/(2*a); 18 ans02=(-b-sqrt(b*b-4*a*c))/(2*a); 19 *p01=ans01; 20 *p02=ans02; 21 //桁落ち回避 22 ans11=(-2*c)/(b+sqrt(b*b-4*a*c)); 23 ans12=(-b-sqrt(b*b-4*a*c))/(2*a); 24 *p11=ans11; 25 *p12=ans12; 26 return 0; 27 } 28 29コード

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/12/09 07:52
2017/12/09 07:57
2017/12/09 08:00