-         
+ Antworten
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 19

Thema: Wurzel mit C-Control/Basic?

  1. #1
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    14.12.2003
    Alter
    26
    Beiträge
    1.187

    Wurzel mit C-Control/Basic?

    Hallo,
    Wie kann ich's hinbekommen die Wurtzel einer zahl durch ein basicprogramm auszurechnen?

    Danke

    Matthias
    Back on the road again...

    Falls ihr wissen wollt, was ich so in meiner roboterfreien Zeit gertieben hab: www.plasmaniac.de.vu

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    10.03.2004
    Ort
    München
    Alter
    33
    Beiträge
    286
    hi matthias!

    wenn es keinen "sqrt" befehl gibt, dann musst du das selber
    programmieren - ist aber nicht schwer.

    geht z.b. über das "rechteck"-verfahren:

    z.b.: wurzel 10:

    10 = 2 * 5 -> a1 = 2, b1 = 5, c = 10

    berechnungsschritt:
    a2 = a1 + (b1-a1) / 2;
    b2 = c / a1;

    (im beispiel: a2 = 3.5, b2 = 10 / 3.5 = 2.85

    du zerlegst deine zahl zu beginn also einfach in zwei faktoren - z.b.
    in 2 und die hälfte der ausgangszahl.
    dann führst du in einer schleife den berechnungsschritt entweder ein
    paar mal aus (so 10 mal reicht in der praxis) oder bis beide zahlen
    in etwa gleich gross sind.

    klingt kompliziert, funktionert aber sehr gut!!!

    (ich hoffe, es gibt in basic keinen sqrt befehl, sonst war das alles für
    die katz )

    ciao,
    simon

  3. #3
    Super-Moderator Lebende Robotik Legende Avatar von Manf
    Registriert seit
    30.01.2004
    Ort
    München
    Alter
    63
    Beiträge
    12.204
    Kompliment, sehr schön beschrieben, falls jemand die Methode einmal testen möchte, ich habe mir eine kleine Excel Datei geschrieben um mir die Wirkungsweise zu verdeutlichen.

    Newton Verfahren wurde es wohl auch genannt. Ein Beispiel für ein Interationsverfahren mit quadratisch abnehmenden Fehler.

    Wenn man in die gelben Felder die zu berechnende Zahl und den Startwert eingibt, dann kann man an der Kurve verfolgen, wie der Fehler über den Iterationen abnimmt.
    Manfred
    Angehängte Dateien Angehängte Dateien

  4. #4
    Administrator Robotik Einstein Avatar von Frank
    Registriert seit
    30.10.2003
    Beiträge
    4.943
    Blog-Einträge
    1
    Keine Sorge, C-Control hat kein SQR-Befehl, allerdings Bascom Basic!

  5. #5
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.02.2004
    Beiträge
    569
    1. man kann auch hoch 0,5 (fuer quadratwurzel) nehmen. soviel ich wies, gibt es beim rechnen mit kommazahlen bie diesem ccontroll-basic probleme und die groese der zahlen ist sehr beschraenkt (ich bin von einem anderen basic das rechnen mit 64bit GLEITKOMMAZAHLEN gewohnt)
    2. das rechteck-veerfahren ist nicht sooo toll, weil bei der c-controll ram mangelware ist und dadurch einige (der viel zu wenigen) variablen belegt werden
    Haftungsausschluß:
    Bei obigem Beitrag handelt es sich um meine private Meinung.
    Rechtsansprüche dürfen daraus nicht abgeleitet werden.
    Besonders VDE und die geltenden Gesetze beachten sowie einen gesunden Menschenverstand walten lassen!

  6. #6
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    22.11.2003
    Beiträge
    991
    berechnungsschritt:
    a2 = a1 + (b1-a1) / 2;
    b2 = c / a1;

    (im beispiel: a2 = 3.5, b2 = 10 / 3.5 = 2.85
    Müsste es nicht heißen: " b2 = c / a2; " ??

    MfG Kjion

  7. #7
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    10.03.2004
    Ort
    München
    Alter
    33
    Beiträge
    286
    hi!

    du hast vollkommen recht.
    sonst macht das nicht wirklich sinn

    ciao,
    simon

  8. #8
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    02.03.2004
    Ort
    Paderborn
    Alter
    32
    Beiträge
    614
    Aus der CCBasic-Hilfe:
    Einen ganzzahligen Näherungswert für die Berechnung der Quadratwurzel liefert die Funktion SQR(x).

    Was die Kommazahlen angeht: Dafür gibt's in CCCasic, mein' ich, keine fertigen Typen(unter "define" in der Hilfe stehen nur "Bit","Byte" und "Word").

    Wenn das so stimmt, man also ohnehin erweitern und Ganzzahlen nehmen muss, ist der SQR-Befehl bestimmt ganz gut.
    2. das rechteck-veerfahren ist nicht sooo toll, weil bei der c-controll ram mangelware ist und dadurch einige (der viel zu wenigen) variablen belegt werden
    Wenn man öfter temporäre Variablen braucht, kann man ja welche wiederverwenden, die beim Wurzelziehen gerade keine Information beinhalten(schon schlimm, dass man in CCBasic keine lokale Variablen definieren kann...).

  9. #9
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    10.03.2004
    Ort
    München
    Alter
    33
    Beiträge
    286
    das problem mit den variablen ist doch nicht wirklich ein problem, oder?
    das mit den indizes (a1, b1, b2, b2, .... an, bn) war nur zur verdeutlichung!

    programmieren wuerde ich das ganze einfach folgendermassen

    function wurzel (var c)
    {
    a = 2; b = c / 2;

    for (var i = 0; i++; i < 10)
    {
    a = a + (b-a) / 2;
    b = c / a;
    }

    return a;
    }

    ...das ist jetzt zwar kein basic - muesste aber leicht umzusetzen sein!
    und man braucht nur vier variablen!

    ciao,
    simon

  10. #10
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    02.03.2004
    Ort
    Paderborn
    Alter
    32
    Beiträge
    614
    das problem mit den variablen ist doch nicht wirklich ein problem, oder?
    das mit den indizes (a1, b1, b2, b2, .... an, bn) war nur zur verdeutlichung!
    Ich sehe das Problem zwar auch nicht so groß, aber eine C-Control hat ganze 24byte Platz für Variablen.
    Wenn 64-Bit-Fließkomma ginge, wären mit 2 Variablen schon zwei Drittel davon belegt. Selbst bei Words(entsprechend erweitert) wären das(wenn man sie nicht noch anderweitig verwendet) noch ein Sechstel des verfügbaren Platzes (man bedenke noch das wertvolle Byte für die Zählvariable).
    ...das ist jetzt zwar kein basic - muesste aber leicht umzusetzen sein!
    Sinnvoll (also besser als der SQR-Befehl) lässt sich das nur mit Ganzzahlen leider nicht so einfach umsetzen.

+ Antworten
Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Ja
  • Themen beantworten: Ja
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •