Neuling mit einer Frage :)
-
Ist ja auch immer das gleiche Problem
-
tut mir leid für den nicht-aussagekräftigen titel
also mein programm läuft soweit, bräuchte nur mal nen tipp, wie ich die anzahl der nachkomma-stellen beeinflussen kann, habe zwar die doku von printf angeguckt, aber verstehe nur bahnhof.
beispiel:
ich habe die zahl x=7.348 als float eingegeben und mit fabs(x) wird der absolute betrag berechnet.
hier mal mein code ausschnittsweise:float x,abbet,ln,lg; printf("Mathematische Funktionen\n ========================\n"); printf("x-Wert: "); scanf("%f",&x); getchar(); abbet = fabs(x); printf("absoluter Betrag: %f \n", abbet); getchar(); return 0;
bekomme ich das korrekte ergebnis, allerdings spuckt er mit den wert 7.348000 aus. ebenso bei anderen rechenoperationen.
ich weiss das der typ float nun 6 stellen einnimmt. einen anderen variablen-typ kann ich nicht nehmen, da ich insgesamt 12 ausgaben machen muss, mit jeweils verschiedene anzahl stellen.
ich denke also ich würde das am besten mit formatierungsoptionen in printf hinbekommen, nur wie ??danke nochmals
-
Schau mal hierhttp://www.cplusplus.com/reference/clibrary/cstdio/printf.html
Der Formatierungsparameter, den Du suchst, heißt 'precision' in o.g. Link.
Somit wäreprintf("absoluter Betrag: %8.3f \n", abbet);
möglicherweise eine Lösung.
Damit sollten 8 Stellen insgesamt mit immer 3 Nachkommastellen ausgegeben werden.
-
PERFEKT VIELEN DANK !!
genau sowas hat mir gefehlt
und dann vielleicht die letzte frage, eher mathematisch:
wie kann ich die dritte wurzel aus x ziehen. habe es versucht mit:
wurz3=pow(x,(1/3));
und
wurz3=pow(x,(1/3);
wenn ich
wurz3=pow(x,0.33);
mache, habe ich das näherungsweise korrekte ergebnis, bedeutet er schluckt mein 1/3 (1 drittel) nicht in der formel.
aber leider liefert es falsche ergebnisse. jemand ne idee ?
-
1/3 "schluckt" der Compiler schon - er berechnet den Wert allerdings mit Ganzzahl-Arithmetik (ohne Nachkomma-Stellen). Versuch's mal mit 1.0/3.0 *
* Es reicht auch aus, wenn einer der Werte eine Gleitkomma-Zahl ist
-
hervorragend, das hat mir schon geholfen...vielen vielen dank!!
hier mal für alle die es interessiert mein quelltext:
#include <stdio.h> #include <math.h> int main() { //Deklarierung der Variablen als Fliesskommazahl: float x,abbet,ln,lg; float wurz,ehoch,xhoch3,xhoch5,wurz3,sns,csn,tng,atng; printf("Mathematische Funktionen\n========================\n"); printf("\nx-Wert: "); scanf("%f",&x); getchar(); //Berechnung der einzelnen Werte: abbet = fabs(x); ln = log(x); lg=log10(x); wurz=sqrt(x); ehoch=exp(x); xhoch3=pow(x,3); xhoch5=pow(x,5); wurz3=pow(x,1.0/3.0); sns=sin(x); csn=cos(x); tng=tan(x); atng=atan(x); //Nun Ausgabe der berechneten Werte per printf: printf("\nabsoluter Betrag: %4.3f \n", abbet); printf("natürlicher Logarithmus: %6.5f \n", ln); printf("Logarithmus zur Basis 10: %7.6f \n", lg); printf("Quadratwurzel: %6.5f \n", wurz); printf("e hoch x: %6.2f \n", ehoch); printf("x hoch 3: %6.3f \n", xhoch3); printf("x hoch 5: %6.1f \n", xhoch5); printf("3. Wurzel aus x: %6.5f \n", wurz3); printf("\ntrigonometrische Funktionen arbeiten mit Bogenmass!!!\n"); printf("-----------------------------------------------------\n"); printf("Sinus: %f \n", sns); printf("Kosinus: %f \n", csn); printf("Tangens: %6.5f \n", tng); printf("Arcus Tangens: %6.5f \n", atng); getchar(); return 0; }
vielleicht hat ja jemand verbesserungsvorschläge oder anmerkungen, nochmals VIELEN dank an alle!
gruss,
lalas
-
CStoll schrieb:
Versuch's mal mit 1.0/3.0 *
* Es reicht auch aus, wenn einer der Werte eine Gleitkomma-Zahl ist
Ich dachte der erste ist wichtig, nicht dass es nur einer ist.
-
nö, irgendeiner, es wird sich immer nach dem genauesten datentypen in der berechnung gerichtet...
langt auch1/3.;
also in der theorie
-
echt? schrieb:
CStoll schrieb:
Versuch's mal mit 1.0/3.0 *
* Es reicht auch aus, wenn einer der Werte eine Gleitkomma-Zahl ist
Ich dachte der erste ist wichtig, nicht dass es nur einer ist.
Es ist egal, welcher. Bei einer Operation werden zunächst beide Operanden auf den höherwertigen Datentyp gebracht und dann verrechnet (das heißt, bei "1/3.0" wird die 1 nach double umgewandelt und anschließend folgt eine Gleitkomma-Division).
-
Nice site!