2014-01-22 1 views
7

Я понимаю, что это обычная проблема. Однако я не могу найти правильный прямой ответ.Почему 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); 
} 

Код, выполняемый с:

НКУ main.c -lm

Что я делаю неправильно?

+1

Значит, вам нужны научные обозначения? –

+0

Также читайте о спецификаторе формата 'g'. –

ответ

16

Что я делаю не так?

Несколько вещей:

  • Используйте %.10e формат для научной нотации с printf для распечатки с десятью цифр после запятой,
  • возвращающих int из ваших main,
  • Рассматривает не используя public для обозначения переменной, при условии, что ваша программа должна быть перенесена на C++, где 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; 
} 

Demo on ideone.

+0

'public' не является ключевым словом в C. :) Хотя его использование будет проблематичным, если этот код когда-либо переместится на C++ – abelenky

+0

@abelenky. Вы правы, я пропустил тег. Спасибо за исправление! – dasblinkenlight

3

Если вам нужна экспоненциальное вам нужно использовать %eformat specifier:

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

Кроме того, public является keyword в C++, и поэтому быть хорошей идеей, чтобы избежать этого и любых других ключевых слов в случае, если этот код должен быть портативным.