• ベストアンサー

flaot型の表示

kmb01の回答

  • kmb01
  • ベストアンサー率45% (63/138)
回答No.2

10進数で表したときに何桁になるか知りたいのなら log10を使えばいい

関連するQ&A

  • fclose()でセグメンテーション違反

    C言語でのファイル読み込みで、ファイルを開いてデータを読み込んで表示することはできたのですが、最後のfclose(fp)でセグメンテーション違反になります。一番最後のwhileループをコメントアウトしたところセグメンテーション違反にはならなかったので、ここに何か問題があると思うのですが、どこが悪いのかが分かりません... #include<stdio.h> #include<stdlib.h> main(void){ FILE *fp; int i=0 , j=0 ,cnt = 0 , c=0; char *name="data.txt"; float *buf1,*buf2; if((fp = fopen(name,"r")) == NULL){ printf("error\n"); return 0; } else{ while((c = getc(fp)) != EOF) { if(c == '\n') cnt++; } printf(">>%d<<\n",cnt+1); rewind(fp); buf1 = (float *)malloc( (int)(cnt/2) +1); buf2 = (float *)malloc( (int)(cnt/2) +1); /*ここからがおかしい?*/ while(1){ if( fscanf( fp ,"%f %f",&buf1[i],&buf2[i])==EOF )break; printf("%f %f\n",buf1[i],buf2[i]); i++; } fclose(fp); } return 0; } なぜセグメンテーション違反になっているのでしょうか?

  • C言語の実数型の足し算

    C言語初心者です。関数の勉強していて、実数型計算に出くわしました。 #include <stdio.h> float add(float a, float b) { return a+b; } int main(void) { float x=10.5,y=20.3; printf("%f %f\n",x,y); printf("%f\n",add(x,y)); return 0; } としたら、 10.500000 20.299999 30.799999 という結果になりました。今のところint型でずーっと勉強していたので、20.3の20.299999表記が怪しく感じられ、結果も同様に怪しく感じられます。どうして、10.5+20.3=30.8とすっっきり表示してくれないのでしょうか。

  • printfの変換仕様について

    C言語初心者です。 よろしくお願いします。 printfの変換仕様の機能の確認を参考書を参考に勉強していた所、以下のようなプログラムがありました。 --------------------------------- #include<stdio.h> int main(void) { float a; a=24.54F; printf("f=%f\n",a); printf("e=%e\n",a);      return 0; } ------------------------------------ 以上のプログラムの「a=24.54F」の「F」の意味が分かりません。 しかし「F」がないと、「 'double' から 'float' へ切り詰めます。」といったようなエラーが出てしまいます。 16進数を入れればいいのかなと思い、「D」や「E」を入れてもダメで、そういうことではないみたいでした。 「a=24.54F」の意味を誰か教えていただければ、嬉しいです。

  • 文字列をfloatで読み込む(atoi,sscanf)。しかし、値がおかしい。

    お世話になっています。 C言語の質問です。 文字列をfloatで読み込もうとしているのですが、出力結果がおかしくて困っています。 文字列をatofで変換した場合、doubleでは上手く表示できるのですが、floatでは少数が上手く表示できません。 また、sscanfでも試したのですが、上手く表示できませんでした。 どうしても、doubleを使わずにfloatであらわしたいと考えています。 どうかこのプログラムの問題点のご指摘お願いします。 実行結果 53.196600 53.196602 53.196602 ソース #include<stdio.h> #include<stdlib.h> #include<string.h> main() { char str[100]="53.1966"; double b; float c,d; b = atof(str); printf("%f\n",b); c = (float)atof(str); printf("%f\n",c); sscanf(str,"%f",&d); printf("%f\n",d); } 開発環境 windowsXP cygwin

  • printf による16進表示について

    C言語初心者です。 今作っているプログラムで、データを16進形式で表示しようとしています。 大体このような感じです。 /*入力時*/ char buf[5]={0x4e,0x94,0xa0,0x2b,0x78} /*出力時*/ for (i = 0; i < 5; i++) { printf("0x%02x\n",buf[i]) } 実際には入力後にある処理によってbufは更新されるのですが、printfの出力結果として、 0xffffff4e 0x94 0xffffffa0 0x2b 0x78 というように、'ffffff'が付加したものがいくつか出力されてしまいます。 これはどういった意味を持つのでしょうか? なんか初心者ならではの漠然とした質問ですいません。。。

  • Linuxプログラミングについて

     今回初めてLinuxでプログラム作成をしているのですが、どうもわからない 現象がでてしまい困っています。なにが悪いのかわかりません。  めちゃ困っています。助けて下さい。宜しくお願い致します。 (サンプルプログラム) #include <stdio.h> main(){ float float_data ; float float_data1 ; float float_data2 ; float RuisekiSum ; printf("\n") ; float_data = 0.1 ; float_data1 = 1.1 ; float_data2 = 0.01 ; RuisekiSum = float_data1 * float_data2 ; printf(" data → float1( %f. %e )\n" , float_data1,float_data1 ) ; printf(" float2( %f, %e )\n" , float_data2,float_data2 ) ; printf(" RuisekiSum = float_data1 * float_data2\n" ) ; printf(" = 0x%x( %f , %e )\n" , RuisekiSum, RuisekiSum, RuisekiSum ) ; printf("\n") ; exit(0) ; } (実行結果) data → float1( 1.100000. 1.100000e+00 ) float2( 0.010000, 1.000000e-02 ) RuisekiSum = float_data1 * float_data2 = 0x0( 0.000000 , 5.265658e-315 ) 何が悪いのでしょうか? 恥ずかしいながら宜しくお願い致します。

  • コンパイルすると‥‥

    C言語です。 emacsでC言語のプログラムを作りました。 #include<stdio.h> int main() { float x; printf("データを入力してください\n"); scanf("%f",&x); printf("%fを受け取りました\n",x); return 0; } といった簡単なプログラムです。 これをコンパイルすると 画像のようなものが表示されて どうしたら良いのか困ってます。 僕が思うにもはやプログラムに問題があるのではなく パソコンの設定に問題があるのかな? と思っているのですがどうしたら良いのかがわかりません。。。 分かる方、よろしくお願いします。

  • このグラフが書きたいんですが。。

    #include <stdio.h> #include <math.h> #define KMAX 20 void eval(float x,float *f,float *df) { float e; e= exp(-x); *f= x-e; *df= 1+e; return; } void main() { float x, eps, f, df, d; int k; scanf("%g%g", &x, &eps); printf("Solution of f(x)=x-eps(-x)=0\n"); printf("Convergence criterion |f(x)|<%G\n\n", eps); printf(" k\tx\t\tf(x)\t\tf'(x)\t\tcorrection\n"); for(k=0;k<KMAX;k++){ eval(x, &f, &df); d= -f/df; printf("%2d %15.6e %15.6e %15.6e %15.6e\n", k, x, f, df, d); x += d; if(fabs(f)<eps) break; } if(k>=KMAX) printf("divergent?\n"); printf("\nroot=%g\n", x); } この解における収束状況をグラフを書いて確かめたいのですがどうやって、何で書いたらいいのかわかりません。教えてください!このプログラムはC++で書いたNewton法です。

  • C++の打切り誤差についてお聞きしたいのですが・・

    ↓のプログラムが、なぜ実行結果のsumが1ではなく1.000054や9.99999999999906e-001、9.9999999999990619e-001といった答えにになってしまうのでしょうか? 10000のところを512でやった場合は普通に1と出力されたのに・・・ #include <stdio.h> int main(void){ int i; float f; double d; f = 0.0; for(i = 0; i<10000; i++) { f += 1.0/10000; } printf("float: n=%d sum=%f\n", 10000, f); d = 0.0; for(i = 0; i<10000; i++) { d += 1.0/10000; }// end for printf("double:16.14e: n=%d sum=%16.14e\n", 10000, d); printf("double:18.16e: n=%d sum=%18.16e\n", 10000, d); return 0; } 実行結果 float: n=10000 sum=1.000054 double:16.14e: n=10000 sum=9.99999999999906e-001 double:18.16e: n=10000 sum=9.9999999999990619e-001 続行するには何かキーを押してください . . .

  • VC6における浮動少数点数値について

    はじめて質問させて頂きます。 C言語の基礎演習レベルの題材ですが 想定外の結果が表示され解決できておりません。 内容としては2つのfloat型変数(以下ソースのb,c)に 全く同じ演算処理結果を代入し コンソール表示させるというプログラムです。 #include <stdio.h> void main() { float a = 0, k = 0; float b = 0; float c = 0; a = 0.2; k = 20.0; k += a; b = k - 20.0; c = k - 20.0; printf( "%f %f %f %f\n", a, b, c, k ); if( b == c ) { printf( "*\n" ); } while( getchar() != EOF ){} } 予想実行結果: 0.200000 0.200000 0.200000 20.200000 * 実際の結果: 0.200000 0.200000 0.200001 20.200001 当方、浮動少数点数値の扱いにも不慣れな為、原因不明です。 なぜこのような結果になるのか、どなたかご教授頂けないでしょうか。 宜しくお願い致します。