Wie lange drucken
Ich bin dabei ein Programm, das Ungefähre PI und ich versuche, die lange, aber es funktioniert nicht.
Hier ist der code
#include<stdio.h>
#include<math.h>
typedef long long num;
main(){
num pi;
pi=0;
num e, n;
scanf("%d", &n);
for(e=0; 1;e++){
pi += ((pow((-1.0),e))/(2.0*e+1.0));
if(e%n==0)
printf("%15lld -> %1.16lld\n",e, 4*pi);
//printf("%lld\n",4*pi);
}
}
InformationsquelleAutor der Frage Carlos | 2011-06-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
%lld
ist der standard C99, aber das funktioniert nicht auf den compiler, den ich verwende (mingw32-gcc v4.6.0). Die Art und Weise, es zu tun auf dieser compiler ist:%I64d
Also versuchen Sie dies:
und
Die einzige Möglichkeit, die ich kenne, tun dies in einer völlig portable Weise zu verwenden, die definiert, in
<inttypes.h>
.In deinem Fall würde es so Aussehen:
Es ist wirklich sehr hässlich... aber es ist wenigstens tragbar.
InformationsquelleAutor der Antwort karadoc
scanf()
- Anweisung verwenden muss%lld
zu.Gibt es viel zu viele Klammern, und viel zu wenige Leerzeichen im Ausdruck
int
fürmain()
.int main(void)
wenn es ignoriert seine Argumente, allerdings ist das weniger eine kategorische Aussage als der rest.main()
und verwenden Sie es nicht selbst; ich Schreibereturn 0;
eindeutig sein.Ich denke, der ganze Algorithmus ist fragwürdig, wenn geschrieben, mit
long long
; der Datentyp sollte wohl mehr wielong double
(mit%Lf
für diescanf()
- format, und vielleicht%19.16Lf
für dieprintf()
Formate.InformationsquelleAutor der Antwort Jonathan Leffler
InformationsquelleAutor der Antwort Atul Kumar
Zunächst, %d ist für eine
int
So
%1.16lld
macht keinen Sinn, da %d ist eine ganze ZahlDaß typedef Sie tun, ist auch nicht notwendig, die diesen Typ verwenden, geradeaus, macht einen viel besser lesbaren code.
Was Sie verwenden möchten, ist der Typ
double
für die Berechnung von piund dann mit
%f
oder%1.16f
.InformationsquelleAutor der Antwort Vinicius Kamakura