Aufgabenstellung(Strukturen, Zeiger, auslesen/einlesen...)
-
Schreib mal 5.2946270969590323e-016 in Dezimalschreibweise auf 7 Stellen genau hin und staune.
Und dann schaust du selbstständig in eine Referenz von printf und versuchst das Problem zu lösen. Ich verrate dir mit Absicht nicht sofort die Lösung, damit du lernst, dies selbstständig herauszufinden. (Außerdem kann ich nicht alle Formatspezifizierer auswendig und müsste selber nachgucken :p )
-
SeppJ schrieb:
(Außerdem kann ich nicht alle Formatspezifizierer auswendig und müsste selber nachgucken :p )
Die Spezifier gehen ja noch. Gerade bei Fließkommazahlen ist das wie abc.
Aber die ganzen Modifier ...
-
Ok, danke :).
Dafür hab ich hier ja so ein Buch :D.
Und stimmt, %f ist für double ausgeben und %lf ist bei scanf bzw. fscanf für double einlesen.
Wir haben immer bis jetzt %f auch für float genommen, im Buch steht eigentlich nichs von float bei der Ausgabe. Für float auch %f?
Da bei %f oder %lf ja abgerundet wird, weil 0,000000xxx rauskommt könnte ich alles als Exponentialzahl ausgeben mit %e, oder ich mache ein extra printf nur für c_divi mit %e.
Aber das Ergebnis der Division stimmt bzw. meine Funktion c_divi, oder?
Warum wird da bei der Ausgabe abgerundet? Ist das einfach so?
Der Wertebereich für double ist ja: -1.7*10^308 bis 1.7*10^308. Also theoretisch müsste da die Zahl 0.000000xxx drinnen sein?
-
printf gibt bei %f sechs Nachkommastellen aus. 5.2946270969590323e-016 fängt aber erst bei der 16 Nakommastelle an.
Wenn du mehr Stellen haben willst, musst du die width und/oder .precision Attribute angeben. Z.B. %.32f
Oder nimm %g. Das nimmt je nach Wert %f oder %e. Auch das kannst du mit den Attributen anpassen.
-
Oder man macht das: printf("%0.100f + j%0.100f",a.real,a.imag);
dann sieht man die Zahlen trotzdem noch in Dezimal :). Natürlich nicht gleich 100 da dann nach der Zahl vielen Nullen kommen, aber so halt einstellen das es genau passt :).
-
edit: den letzten Beitrag habe ich geschrieben bevor ich DirkBs Beitrag gelesen habe :D.
Aber die funktion c_divi stimmt?
-
guest123 schrieb:
Der Wertebereich für double ist ja: -1.7*10^308 bis 1.7*10^308.
Der Wertebereich von double geht von -DBL_MAX bis DBL_MAX.
guest123 schrieb:
Also theoretisch müsste da die Zahl 0.000000xxx drinnen sein?
Die unteren double Schranken gehen analog von -DBL_MIN bis DBL_MIN.
-
guest123 schrieb:
Wir haben immer bis jetzt %f auch für float genommen, im Buch steht eigentlich nichs von float bei der Ausgabe. Für float auch %f?
Ja. Wegen der Default-argument-promotion bei variablen Parameterlisten.