Potenzieren -> Rationaler exponent
-
neoexpert schrieb:
Wie berechnt man sowas allgemein ohne maschine?
sollte die frage nicht eher lauten, wie berechnet man sowas effizient mit maschiene
-
nachfrag0r schrieb:
neoexpert schrieb:
Wie berechnt man sowas allgemein ohne maschine?
sollte die frage nicht eher lauten, wie berechnet man sowas effizient mit maschiene
Ja irgendwie muss die lauten. Wie berechnet man z.B. 2^1/2 ohne raschenrecher?
Spontan könnte ich das mit einer schleife lösen. da würde ich z.B. testen wie nah 2*2 an 2^1/2 ist. Nicht nah genug dann z.B. 1.5*1.5. Und so weiter. Aber das müsste ja schneller gehen oder?
-
bringt zwar nichts aber evtl. zu ner wurzel umformen
-
Kurze Antwort: Magie.
Lange Antwort: Beispielsweise so. Abhängigkeiten hier.
Fließkommaarithmetik ist erstaunlich kompliziert; man kann mit solchem Zeug ganze Bücher füllen. "The Art of Computer Programming" hat im zweiten Band ein langes Kapitel über Fließkommaarithmetik und beschreibt auf 20 dicht mit Mathematik vollgepackten Seiten auch Methoden der Potenzierung. Du wirst mir verzeihen, wenn ich das nicht in leicht verständlicher, für ein Forum angemessen kurzer Weise wiedergeben kann.
-
Danke dir. Dann weiss ich jetzt wenigstens, dass es irgendwie geht.
-
@neoexpert: mit ^ meinst den mathematischen Operator oder den C-Operator für XOR?
-
supertux schrieb:
@neoexpert: mit ^ meinst den mathematischen Operator oder den C-Operator für XOR?
x^y mit y ist element der natürlichen zahlen, kann ich in C mit einer
>>>SCHLEIFE<<<
gut berechnen.
Also ich meine eigentlich pow(x,y);
Nur halt wie soll ich es sonst ausdrücken, damit es nicht c-ähnlich aussieht?
-
neoexpert schrieb:
x^y mit y ist element der natürlichen zahlen, kann ich in C mit einer
>>>SCHLEIFE<<<
gut berechnen.
Wieso, mein XOR berechne ich immer so
unsigned int XOR(unsigned int l, unsigned int r) { int i = 0; unsigned int ret=0; for(i=31;i>=0;--i) { if((((l>>i) & 1) && (!((r>>i) & 1))) || ((!((l>>i) & 1)) && ((r>>i) & 1))) { ret |= 1;} if(i) ret<<=1; } return ret; }
-
neoexpert schrieb:
Nur halt wie soll ich es sonst ausdrücken, damit es nicht c-ähnlich aussieht?
So: xy
Wenn du einen neuen Post erstellst, wirst du unterhalb des Eingabefensters ein paar Knöpfe bemerken. Einer davon ist mit "Hoch" beschriftet, damit geht das. Du kannst auch direkt [ h ] ... [ /h ] um den hochzustellenden Text schreiben (ohne Leerzeichen).
-
neoexpert schrieb:
supertux schrieb:
@neoexpert: mit ^ meinst den mathematischen Operator oder den C-Operator für XOR?
x^y mit y ist element der natürlichen zahlen, kann ich in C mit einer
>>>SCHLEIFE<<<
gut berechnen.
Also ich meine eigentlich pow(x,y);
Nur halt wie soll ich es sonst ausdrücken, damit es nicht c-ähnlich aussieht?ich frage es ausdrücklich, da viele Anfänger den Fehler machen
int x = 5^2; printf("%d\n", x);
und sich wundern, dass sie 7 statt 32 bekommen.
Ich bin nicht sicher, aber für rationale/reelle Zahlen verwendet pow bestimmt ein numerisches Verfahren. Siehe http://www.google.com/codesearch/p?hl=en#Q1IisS6qMQI/pub/gnu/glibc-2.0.tar.gz|C0YBIcajADo/glibc-2.0/sysdeps/i386/fpu/__math.h&q=pow glibc lang:c