web-dev-qa-db-ja.com

printfが科学的記数法を使用しないのはなぜですか?

これはよくある問題だと思います。しかし、私は確かな正解を見つけることができません。

_16 ^ 54 = 1.0531229167e+65 (this is the result I want)
_

pow(16,54)を使用すると、次のようになります。

105312291668557186697918027683670432318895095400549111254310977536.0

コードは次のとおりです。

_#include <stdio.h>
#include <math.h>
#include <stdlib.h>

void main(){

   double public;
   double a = 16;
   double b = 54;
   public = (pow(a,b));

   printf("%.21f\n", public);
}
_

実行されるコード:

gcc main.c -lm

私が間違っているのは何ですか?

8
Simon.

私は何が間違っているのですか?

いくつかのこと:

  • 使用する %.10eドットの後に10桁の印刷物の場合はprintfを使用した科学的記数法の形式
  • intからmainを返します。
  • プログラムをC++に移植する必要がある場合に備えて、変数に名前を付けるためにpublicを使用しないことを検討してください。ここでpublicはキーワードです。

プログラムを修正する方法は次のとおりです。

#include <stdio.h>
#include <math.h>
#include <stdlib.h>

int main(){

   double p;
   double a = 16;
   double b = 54;
   p = (pow(a,b));

   printf("%.10e\n", p);
   return 0;
}

ideoneのデモ

22
dasblinkenlight

やってみました:

printf("%e\n", public);

%e指定子は科学的記数法用です ドキュメントに記載されています

9
abelenky

科学的記数法が必要な場合は、%eフォーマット指定子 を使用する必要があります。

printf("%e\n", public);
        ^^   

また、publicはC++では keyword であるため、この場合はそれと他のkeywordsを避けることをお勧めします。コードは移植可能である必要があります。

3
Shafik Yaghmour