• ベストアンサー

Cのdouble変数の出力

Cの計算プログラム、 double変数GWSの出力が-1.#INF00になりました。 なぜでしょうか? printf("%lf\n",GWS); 教えてください。 お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • sha-girl
  • ベストアンサー率52% (430/816)
回答No.1

No.855707 質問:「log(0)と-1.#INF00Pの関係」

参考URL:
http://oshiete1.goo.ne.jp/kotaeru.php3?q=855707
2003saki
質問者

お礼

教えていただいたサイト大変勉強になり、また役に立ちました。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • C言語の変換仕様について

    C言語の変換仕様について質問させていただきたいのですが、 ある書籍にはdouble型の変数ansを出力するときに、 printf("%lfです。\n", ans); と書かれているのですが、%lfではなくて%fではないでしょうか。 勘違いだったらごめんなさい。

  • C言語で計算が合いません(初心者)

    C言語で計算が合いません(初心者) 簡単な計算のプログミングをしているのですが 計算が合わなくて困っています。 整数型変数aと実数型変数bを定義 整数型変数cとdを定義して、c=0.5*a*b、d=a/2*b 実数型変数eとfを定義して、e=0.5*a*b、f=a/2*b という内容のプログラムを作ったのですが a=7,b=2.4を代入してみた結果 ---------------------------- Input a>>7 Input b>>2.4 8 7 8.400000 7.200000 ---------------------------- となりました どこが間違っているのでしょう? 答えは8.4でcが8なのは有効数字のためだと思いますが dとeで答えが全く違う理由が分かりません。 下に私が書いたものを貼っています。 ---------------------------- #include<stdio.h> int main(void){ int a,c,d; double b,e,f,ans; printf("Input a>>"); scanf("%d",&a); printf("Input b>>"); scanf("%lf",&b); c=0.5*a*b; printf("%d\n",c); d=a/2*b; printf("%d\n",d); e=0.5*a*b; printf("%lf\n",e); f=a/2*b; printf("%lf\n",f); return 0; } ---------------------------- よろしくお願いします。

  • C言語のプログラミングで困っています

    C言語を勉強しています。まだまだ初心者で分からないことだらけなのですが、今回はファイル入出力の部分が分からず苦戦しています。 『100個の実数が入った2つのテキストファイルから数値を読み込み、  絶対値を求めるなどの計算をする』プログラムを作成しているのですが、 コンパイルし実行すると強制終了してしまいます。 プログラムは、 void main(void) { FILE *fp; double c[50000];   double d[50000];   double e[50000]; int n = 0;   int m = 0;   int i = 0;   char fname[80];   char fname2[80]; printf("ファイル名 : ");    gets(fname); if((fp = fopen(fname, "r")) == NULL){ printf("ファイルがオープンできません\n"); exit(1); } printf("\n"); while (fscanf(fp,"%lf",&c[i])!=EOF){ printf("%3d : %3lf",++n,c[i]); printf("\n"); i++; } printf("\n"); i=0; n=0; printf("ファイル名 : ");    gets(fname2); if((fp = fopen(fname2, "r")) == NULL){ printf("ファイルがオープンできません\n"); exit(1); } printf("\n"); while (fscanf(fp,"%lf",&d[i])!=EOF){ printf("%3d : %3lf",++n,d[i]); printf("\n"); i++; } …(以下計算) のようになっています。 整数のデータで計算を行うと、正常に動くのですが…。 コンパイルしてもエラーが出ないので、どこが悪いのかわからず困っています。 どなたか教えていただけないでしょうか。お願いしますm(_ _)m

  • C言語のポインタのプログラムについての質問です。

    C言語のポインタについて質問です。 nこの配列データaを受け取り、それらの値をもとに、2つのデータを引数で受け取って交換する関数void swap(double *a,*b)を用いることにより最終的に降順に並べ替えて出力したのち、それらを平均(average)と標準偏差(standard deviation)を引数で受け渡す関数 void calc_ave_stddev(int n,double a[],double *ave,double*stddev)を利用して出力されるプログラムを教えてほしいです。 main関数内での書式は printf("enter n:"); scanf("%d,&n"); for(i=0;i<n;i++){ printf("enter a[%d]:",i); scanf("%lf"&a[i]); } main関数での結果の出力は、 for(i=0;i<n;i++){ printf("a[%d]=%lf\n",a[i]); } printf("ave=%lf stddev=%lf\n",ave,stddev); です。

  • 変数の受け渡し double

    関数の中にある変数の型を変えたら不具合が出たのでそのことに ついて質問します。 ある変数値が負である関数のdouble型変数に受け渡した後に値が変わりました。 本でdoubleの範囲を調べると1.7 * 10^(-308) ~ 1.7 * 10^(+308) と書いてありました。doubleに負の数値を代入してはまずいのでしょうか? 具体的なプログラムを下に載せます。 int mod(double x,int p) { int ans; printf("x=%f prime=%d ",x,p); if(x >= 0){ if(x >= p) { ans=fmod(x,p); printf("fmod=%d\n",ans); }else{ ans=x; printf("mod=%d\n",ans); } }else{ do{ x+=p; }while(x < 0); ans=x; printf("mod=%d\n",ans); } return ans; } int rmd(struct zahyo *P,struct zahyo *Q,int prime) { unsigned int m,n; m=mod(Q->x - P->x,prime); n=mod(Q->y - P->y,prime); exeuclid(m,prime,1,0,0,1); printf("m=%d n=%d aa=%d aa*n=%d\n",m,n,aa,aa*n); return mod(aa*n,prime); } 実行結果の一部 m=10 n=6 aa=-1 aa*n=-6 x=4294967290.00000 prime=11 fmod=9    関数modのdouble型変数に負の数を受け渡すのはここ以外にもありますが このときだけ他の数値になりました。 考えられる原因は何かあるでしょうか?よろしくお願いします。

  • 不定値の出力について

    #include <stdio.h> int main(void) { /*  */ int x=1, a; /*  */ double y=0, b; /*  */ printf("a = %d\n", a); /*  */ printf("b = %f\n", b); /*  */ printf("x/y = %f\n", x/y); /*  */ printf("y/y = %f\n", y/y); /*  */ return(0); } -------------------------------------------------- このようなプログラムを実行すると、どのような出力結果が期待できるのでしょうか。 int 型と double 型しか用いていませんが、型によって説明が異なるのであれば他の型についても回答お願い致します。 コンパイラや環境によって出力結果が異なるのでしょうか。 具体的な出力結果でなく、どのように処理されるためにどのような出力が期待されるという形でも説明を頂けますでしょうか。 Visual C++ で実行した結果は次のようになりました。 -------------------------------------------------- a = -858993460 b = -92559631349317831000000000000000000000000000000000000000000000.000000 x/y = 1.#INF00 y/y = -1.#IND00 -------------------------------------------------- ご教示いただければ幸いです。

  • C言語 関数化の仕方について

    こんにちは。プログラムの関数化の方法についてお願いがあり投稿いたしました。プログラムの関数化というものを行いたいのですが方法が分からないので、以下のプログラムを関数化していただきたいのです。 #include <stdio.h> int main() { printf("摂氏と華氏を相互変換します。変換したい温度を入力してください。\n"); printf("入力例:32F, 100C, etc.数値と単位の間に空白は不要です。\n"); double x, xc; char u; scanf("%lf%c",&x,&u); if (u=='C') { xc = (x * 9 / 5) + 32; printf("%lf degCは%lf degFです。\n", x, xc); } else if (u=='F') { xc = (x - 32) * 5 / 9; printf("%lf degFは%lf degCです。\n", x, xc); } else { printf("書式が誤っています。\n"); } return 0; } コードを添えていただけるとさらに分かりやすくて助かります。お手数ですがよろしくお願いいたします。

  • C++に関する質問です

    #include <stdio.h> double calave (double [ ] ); double calmax (double [ ] ); main () { int i; double average,maximum; double a[5]; for ( i=0;i<=4;i++) { printf ("Input data %d\n", i ); scanf ("%lf",&a [i] ); } average = calave (a); maximum = calmax (a); printf ("Average = %lf\n", average); printf (" Maximum = %lf\n", maximum); } double calave (double x [5]) { int i; double ave; ave = 0; for (i=0; i<=4; i++) { ave = ave + x[i]; } ave = ave /5.0; return (ave); } double calmax (double x[5]) { int i; double max; max = x[0]; for ( i=0; i<=4; i++) { if ( max >= x [i] ){ max = max; }else{ max = x[i]; } } return (max); } 上のプログラムでは,関数calaveに入力している配列変数はa[ ]だが,関数calave内で使用している配列変数はx[ ]であり,名前が違う変数である。これが,プログラム上は問題ない理由を教えてください。 よろしくお願いします。

  • 【C初心者】+,-,*./について【電卓】

    【C初心者】+,-,*./について【電卓】 次のようなプログラミングを作りました。 きちんと実行できるのですが見ての通りややこしいプログラムになってます #include <stdio.h> int main(void) { int ope; double n2,n3; printf("整数1:"); scanf("%lf",&n2); puts("ADD=0,SUB=1,MUL=2,DIV=3");scanf("%d",&ope); printf("整数2:"); scanf("%lf",&n3); switch (ope) { case 0 : printf("計算すると%fになります.?n",n2+n3); break; case 1 : printf("計算すると%fになります.?n",n2-n3); break; case 2 : printf("計算すると%fになります.?n",n2*n3); break; case 3 : printf("計算すると%fになります.?n",n2/n3); break; default: printf("計算出来ません.?n"); break; } return (0); } printf文をcaseの中で5回も使っています 私としては(以下適当です、すいません) case 0 : sign= + ;break; case 1 : sign= - ・ ・ ・ default : 計算できません error=1 ;break; if (error != 0) printf("計算すると%fになります.?n",n2 sign n3); みたいな感じを想像しているのですが signはintとかcharのどれにしたらよくて signに"+"をいれて計算させるにはどうしたらいいんでしょう

  • C言語のプログラムについてですが、

    #include <stdio.h> int main(void) { double r; printf("半径を入力してください:"); scanf("%lf", &r); printf("円周=%f\n", 2.0 * r * 3.14159); printf("円面積=%f\n", r * r * 3.14159); return 0; } 上のC言語のプログラムを参考にして 正三角形一辺を double値でキーボード入力し、次のように高さと 面積を計算するプログラムを教えてください。 よろしくお願いしますl_ω_l 3の平方根は1.73205とします。 [実行結果] ======= 一辺の値を入力してください: 20 高さ=17.320500 面積=173.205000