Antworten

Der Beitrag verursachte die folgenden Fehler, die behoben werden müssen:
Achtung: In diesem Thema wurde seit 120 Tagen nichts mehr geschrieben.
Wenn Sie nicht absolut sicher sind, dass Sie hier antworten möchten, starten Sie ein neues Thema.
Einschränkungen: 8 pro Beitrag (8 verbleibend), maximale Gesamtgröße 8,79 MB, maximale Individualgröße 1 MB
Entfernen Sie den Haken der Dateianhänge, die gelöscht werden sollen
Klicken Sie hier oder ziehen Sie Dateien hierher, um sie anzuhängen.
Anhänge und andere Optionen
Verifizierung:
Bitte lassen Sie dieses Feld leer:
Geben Sie die Buchstaben aus dem Bild ein
Buchstaben anhören / Neues Bild laden

Geben Sie die Buchstaben aus dem Bild ein:

Tastenkürzel: Alt+S Beitrag schreiben oder Alt+P für Vorschau

Zusammenfassung

Autor Peter
 - 09.07.2021, 19:29:36 CEST
Hallo
Du kannst es aber als Quellcode hochladen.
Aber Zip ist doch ok.
Autor PICkel
 - 09.07.2021, 18:50:11 CEST
Hallo!

Um wieder mal einen kleinen Beitrag zum Forum zu leisten, hier ein Beispiel für eine Wurzelberechnung mit ganzzahligen Variablen:

Historie: Für eine kleine CNC-Fräse habe ich eine Steuerung mit einem PIC programmiert. Zur Berechnung von Kreisbahnen bzw. deren Radien war eine schnelle Wurzelberechnung notwendig.
Da die Schrittmotorsteuerung ohnehin nur mit ganzzahligen Schritten (hier: 0,01mm/Schritt) arbeitet, ist keine Gleitkomma- Arithmetik notwendig.

Die Suche nach brauchbaren Algorithmen führte mich zu:
https://en.wikipedia.org/wiki/Methods_of_computing_square_roots

Das darin enthaltene C-Programm wurde quasi 1:1 in mikroBasic (V7.6) umgeschrieben und erfüllt alle Erfordernisse. (Leider nur als zip-Datei anfügbar.)

Im Quelltext gibt es die Funktion iWurzel(Radikant), als Eingangsparameter wird ein 32-Bit-Wert erwartet, das Ergebnis ist ein 16-Bit-Wert.

Im Hauptprogramm sind die benötigten Zeiten zwischen den NOPs angegeben.
Man sieht den Zeitunterschied zwischen Float- und Ganzzahl- Arithmetik.
Angenehmer Nebeneffekt: Ohne die sqrt()-Aufrufe mit Gleitkommaarithmetik verringert sich der Bedarf an Flash-Speicher von 3572 auf 416 Bytes.

Nachteil der Lösung: Bei kleinen Werten für das Funktionsargument kann der prozentuale Fehler des ganzzahligen Ergebnisses recht hoch sein.
Das spielte aber im Anwendungsfall keine Rolle, da selbst ein 2mm-Fräser (R=100/100mm) einen Radikant von mindestens 10000 ergibt.

MfG
PICkel