x^y Funktion selbst schreiben!
-
hmm, wieso? ich dachte %lf steht für long float ... wieso muss ichd as zwingend bei double benutzen?
-
Ich gehe jetzt mal vom PC aus.
Ein float belegt 4 Byte, ein double 8 Byte.
Wenn du scanf sagst, es soll flost (%f) einlesen, werden an die Adresse die du da mit
&basis
angibst 4 Byte geschrieben.Der Compiler erkennt sowas mittlerweile und meiner sagt:
..\main.c|11|warning: format '%f' expects type 'float *', but argument 2 has type 'double *'|
-
printf funktioniert da anders. Da werden nicht die Adressen Übergeben sondern die Werte selber.
Und bei Funktionen mit variabler Argumentenliste, wird float auf double erweitert.
-
long float stammt noch aus K&R Zeiten, also Pre-ANSI.
Wurde mit ANSI 1989 dann durch double ersetzt.
-
also muss ich mir für die klausur merken, immer dann wenn ich double werte einlesen soll muss ich %lf benutzen? niemals %d oder %f ?!
-
%d steht für decimal signed integer
im gegensatz zu %x (hexadezimal) bzw. %o (oktal), die aber als unsigned integer behandelt werden.
%u steht für decimal unsigned integer
-
Ist das denn so schwer, die Handvoll Spezifizierer zu merken?
%i -> int
%u -> unsigned int
%f -> float
%li -> long int
%lu -> unsigned long int
Jeweils für *printf UND *scanf.
Bei double gibts Unterschiede, wenn du selbst Typen vergeben kannst, nimm halt immer float, da kann dann nichts passieren.
(die o.g. Liste ist natürlich nicht vollständig, das wollte ich nur noch mal explizit erwähnen)
-
Bei %i muss man aber aufpassen, denn das erkennt die Prefixe für Oktal- und Hex-Zahlen.
Eine 010 wird als Oktal erkannt und ist demnach 810
Entsprechen wird 0x10 zu 1610Bei %d wird 010 zu 10 und 0x10 wird als 0 eingelesen (wg. dem x)
-
thx
-
Wenn etwas schneller gehen soll, kann man sich auch noch Rechenarbeit sparen; denn
x^{2k} = (x2)k
x^{2k+1} = (x2)k * x
wobei mit z:=x^2 wir ein neues (kleineres) Problem haben: z^k
„square and multiply“ heißt der Algo.
-
Ist das nicht eher binäres Potenzieren?
-
314159265358979 schrieb:
Ist das nicht eher binäres Potenzieren?
Quark, mal wieder, leider.
http://de.wikipedia.org/wiki/Binäre_Exponentiation