Warum verwendet printf keine wissenschaftliche Notation?

Lesezeit: 2 Minuten

Benutzeravatar von Simon
Simon.

Ich verstehe, dass dies ein allgemeines Problem ist. Ich kann jedoch keine solide direkte Antwort finden.

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

Wenn ich benutze pow(16,54)Ich bekomme:

105312291668557186697918027683670432318895095400549111254310977536.0

Code ist wie folgt:

#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);
}

Code ausgeführt mit:

gcc main.c -lm

Was mache ich falsch?

  • Sie wollen also wissenschaftliche Notation?

    – Shafik Yaghmour

    22. Januar 2014 um 16:09 Uhr

  • Lesen Sie auch über die g Formatbezeichner.

    – Yves Daust

    7. August 2017 um 22:10 Uhr

  • Ihr Code ist Ausstellungen UB (main() gibt ein zurück int – kein void oder irgendetwas anderes, egal was zu “funktionieren” scheint, egal wie oft oder auf wie vielen Systemen es ausgeführt wird). … was ich sehe, weist die Antwort jetzt darauf hin. Gut. Wie auch immer, UB ist eine schlechte Nachricht, aber zum Glück ist dieser leicht zu beheben.

    – Pryftan

    15. Oktober 2019 um 12:39 Uhr


Was mache ich falsch?

Verschiedene Dinge:

  • Verwenden %.10e Format für die wissenschaftliche Notation mit printf für einen Ausdruck mit zehn Stellen nach dem Punkt,
  • Rückgabe an int von deiner main,
  • Ziehen Sie in Betracht, es nicht zu verwenden public um eine Variable zu benennen, für den Fall, dass Ihr Programm nach C++ portiert werden müsste, wo public ist ein Schlüsselwort.

So können Sie Ihr Programm reparieren:

#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 auf ideone.

  • public ist kein Schlüsselwort in C. 🙂 Obwohl seine Verwendung problematisch sein wird, wenn dieser Code jemals nach C++ verschoben wird

    – abelenky

    22. Januar 2014 um 16:11 Uhr

  • @abelenky Du hast Recht, ich habe das Tag übersehen. Danke für die Korrektur!

    – Sergej Kalinitschenko

    22. Januar 2014 um 16:15 Uhr

Hast du es versucht:

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

Das %e Bezeichner ist für die wissenschaftliche Notation, wie in der Dokumentation beschrieben

Benutzeravatar von Shafik Yaghmour
Shafik Yaghmur

Wenn Sie eine wissenschaftliche Notation benötigen, müssen Sie die verwenden %e Formatbezeichner:

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

Ebenfalls, public ist ein Stichwort in C++ und daher wäre es eine gute Idee, dies und alle anderen zu vermeiden Schlüsselwörter falls dieser Code portabel sein muss.

  • Lustige Wortspiele: Öffentlichkeit [is a] Stichwort (und Öffentlichkeit ist im grässlichen C++), Schlüsselwörter in Fall (auch ein Schlüsselwort in C und C++ und auch in anderen). Es ist jedoch eine großartige Idee, Code mit C++-Namen zu schreiben, nur um die C++-Konvertierungen zu verhindern! Aber Sie haben Recht, wenn der Wunsch besteht, es zu portieren, sollten Sie das besser nicht tun.

    – Pryftan

    15. Oktober 2019 um 12:48 Uhr

1432910cookie-checkWarum verwendet printf keine wissenschaftliche Notation?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy