Hallo, Normalerweise sagt man ja das quatdrat von x = x*x oder pow(x, 2) oder sqr(x) ich würde gerne auf die bibliotheksfunktionen komplett verzichten. das quadrat am liebsten so x = x^2; (ich weiß der "^" ist eigentlich der Xor op) und ebenso die quadratwurzel mit x = x^(1/2) (werde ich vorher noch mit 1000 multiplizieren, da ich die berechnung in int durchführen möchte.) also wie kann man eine potenz zahl angeben ohne bibliotheksfunktionen zu verwenden?
Hab ich das richtig verstanden du möchtest in C anstelle von pow(x,2) x^2 schreiben ?
so in etwa, nur das ich zwischen x und 2 keine xor will sonder am liebsten das quadrat. gibt es ne schreibweise? Ich will die wurzel aus einer zahl ziehen, für die xte wurzel potenzierst du die zahl mit dem kehrwert der potenz.
Micha S. schrieb: > so in etwa, nur das ich zwischen x und 2 keine xor will sonder am > liebsten das quadrat. gibt es ne schreibweise? Was ist an x * x falsch? Wenn dir die Schreibweise nicht gefällt, dann verpack es halt in eine Funktion
1 | double sqr( double x ) |
2 | {
|
3 | return x * x; |
4 | }
|
5 | |
6 | ...
|
7 | |
8 | |
9 | c = sqrt( sqr(a) + sqr(b) ); |
oder ein Makro
1 | #define SQR(x) ((x) * (x))
|
2 | |
3 | |
4 | ...
|
5 | |
6 | c = sqrt( SQR(a) + SQR(b) ); |
um die Wurzel wirst du allerdings nicht herumkommen. Die wirst du nur los, wenn du sie mathematisch loswerden kannst.
Sofern du nur x quadrat brauchst würde ich auch x*x schreiben. Bei höheren Potenzen wird das mühsam. Hmm Hätte ich aber noch nicht gehört dass man in C Operatoren redefinen kann. Quasi den ^ (XOR Operator) mir der pow(,) Funktion belegen.
Micha S. schrieb: > aber um die wurzel zu ziehen! Wuzelziehen kannst du natürlich auch selbst in einer Funktion mit Iterationsverfahren implementieren a la http://de.wikipedia.org/wiki/Wurzel_(Mathematik) Numerische Berechnung
@Michael Rathmair also ich möchte auf die bibliotheksfunktionen komplett verzichten, da sie nur unnötig overhead darstellen! und overloading gibt es meines wissens nach nur in cpp... mathematisch ist die quadratwurzel aus x = x ^ (1 / 2) (also x hoch 0,5). deswegen bin ich so scharf auf einen potenzoperator :) alleine die sqrt funktion belegt ca 26%daten und und 19% des programmspeichers...
Micha S. schrieb: > @Michael Rathmair > also ich möchte auf die bibliotheksfunktionen komplett verzichten, da > sie nur unnötig overhead darstellen! Und du denkst, du kannst das besser. > mathematisch ist die quadratwurzel aus x = x ^ (1 / 2) (also x hoch > 0,5). > deswegen bin ich so scharf auf einen potenzoperator :) Aha. Und du glaubst ein allgemeiner Potenzoperator lässt sich leichter implementieren als eine spezialisierte Wurzelfunktion, die einen Sonderfall einer bestimmten Potenz darstellt. > alleine die sqrt funktion belegt ca 26%daten und und 19% des > programmspeichers... Von nix kommt nix. Wenn du Wurzel brauchst, dann musst du sie auch berechnen. Was du in Frage stellen kannst und musst ist etwas anderes: Muss es unbedingt die Wurzel sein. Wenn es zb nur um den Vergleich von Werten geht, muss man nicht notwendigerweise eine Wurzel ziehen, da die Wurzelfunktion streng monoton ist.
danke für die freundliche antwort, mein gott warum bin ich noch in dem forum? nein das ich es besser kann habe ich nie gesagt, aber ich kann die berechnung z.b. mal in int durchführen, oder seid wann hat der m16 eine floating point einheit?
Also du könntest eine Funktion Schreiben die: 1. prüft ob der Exponent rational oder netürlich ist bzw > oder < 0 (bzw. = 0) 2. bei natürlichem Exponenten in einer Schleife iterativ multiplizieren 3. bei rationalem negativem Exponenten mit intervallschachtelung Wurzelziehen
Micha S. schrieb: > danke für die freundliche antwort, mein gott warum bin ich noch in dem > forum? Weil du kein C-Buch hast? > nein das ich es besser kann habe ich nie gesagt, aber ich kann die > berechnung z.b. mal in int durchführen, Dann such dir eine Wurzelfunktion die in int rechnet. Auch solche gibt es im Web zur Genüge und eine einfache Implementierung ist gar nicht mal so schwer. Hast du ganz sicher auch oft gemacht. Die Umkehrung benutzen: einfach mal eine Zahl nehmen und davon das Quadrat ausrechnen. Ist das Quadrat größer als die Zahl, dann muss die Wurzel kleiner sein. Im Binärsystem kann man damit die Wurzel aus einer 16 Bit Zahl mit 8 Multiplikationen errechnen: Das Ergebnis kann nur 8 Bit haben und für jedes Bit muss man feststellen, ob es 0 oder 1 sein muss. pow rettet dich hier nicht und auch das Verstecken hinter einer anderen Schreibweise ändert nichts daran, dass sie gerechnet werden muss.
Nein weil ich gerne mit Leuten über etwaige Lösungen diskutiere. Ausserdem hatte ich während meines Studiums mehr als genug programmiersprachen, da sammelt man einiges an büchern^^
Ähhmm ja ich halt mich da jetzt raus. Wies ich mal versuchen würde siehe oben. Funktioniert auch mit int -> einfach mal am PC testen und ab damit in den Controller. Was dann im Endeffekt besser ist musst du für dich selber entscheiden. (Unabhängig davon ob du ein C-Buch im Regal stehen hast oder nicht ;-) ) Wünsch dir viel Erfolg !
Dankeschön den habe ich schon :) funktioniert super!!!
1 | ui16 int_sqrt(ui32 zahl) |
2 | {
|
3 | ui16 wurzel = UI16MAX ; |
4 | ui16 temp = wurzel-1; |
5 | while ( temp < wurzel ) |
6 | {
|
7 | wurzel = temp; |
8 | temp = wurzel + zahl/wurzel >> 1; |
9 | }
|
10 | return wurzel; |
11 | }
|
hoffe es hilft noch jemandem!
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.