Das lernst du heute
- Wurzel und Potenz
- Natürlicher Logarithmus
- Es gibt kein log10
Ein Erzfund liegt 30 m östlich und 40 m nördlich deiner Basis. Wie weit ist das? Ein Tank hat 0,5 kPa, der nächste 50 000 kPa – wie zeigst du beides sinnvoll an? Für solche Fragen hat der Chip vier Rechenbefehle, die über mul und div hinausgehen.
Wurzel und Potenz
sqrt r a zieht die Quadratwurzel, pow r a b rechnet a hoch b. Mit dem Satz des Pythagoras bekommst du den Abstand aus zwei Strecken:
pow tmp dx 2 # dx * dx
pow d dz 2 # dz * dz
add d d tmp
sqrt d d # 30 und 40 ergeben 50
pow folgt dem Gleitkomma-Standard IEEE-754. Ein paar Ergebnisse solltest du kennen:
| Rechnung | Ergebnis |
|---|---|
pow r0 2 10 | 1024 |
pow r0 x 0.5 | wie sqrt r0 x |
pow r0 10 -1 | 0,1 |
pow r0 -8 0.5 | NaN |
sqrt r0 -4 | NaN |
Eine Wurzel aus einer negativen Zahl gibt es nicht. Der Chip meldet keinen Fehler, er liefert NaN – und jede Rechnung, die danach mit dem Wert arbeitet, wird ebenfalls NaN. Ein falsch herum abgezogener Wert reicht dafür.
exp und log
exp r a rechnet e hoch a (e ≈ 2,718). log r a geht den Weg zurück: Es ist der natürliche Logarithmus, also zur Basis e. Beide brauchst du überall, wo etwas pro Takt um einen festen Anteil wächst oder schrumpft. Beispiel: Ein Wert verliert jeden Takt 10 % seines Abstands zum Ziel. Nach wie vielen Takten ist nur noch 1 % übrig?
log n REST # REST = 0.01, log(0.01)
log tmp FAKTOR # FAKTOR = 0.9, log(0.9)
div n n tmp # rund 43.7 Takte
Umgekehrt rechnet exp aus, wie viel nach n Takten noch übrig ist. exp und log heben sich gegenseitig auf:
log tmp FAKTOR # log(0.9)
mul tmp tmp n # n * log(0.9)
exp rest tmp # 0.9 hoch n, wie pow rest FAKTOR n
Es gibt kein log10
Einen Zehnerlogarithmus kennt der Chip nicht, auch kein ln – log ist schon der natürliche. log10 bekommst du über eine Division:
log10(x) = log(x) / log(10)
log(10) ist eine feste Zahl. Als define kostet sie kein Register:
define LN10 2.302585092994046 # log(10)
log e x
div e e LN10 # e = log10(x)
floor e e # Zehnerpotenz
Damit zerlegst du einen großen Wert in Zehnerpotenz und Mantisse, so wie man 50 000 als 5 · 10⁴ schreibt. Im Code ist 5e4 übrigens keine gültige Zahl – zerlegen musst du selbst.
Gleitkomma rechnet nicht immer glatt: log(1000) / log(10) ergibt 2,9999999999999996 statt 3. Ein floor danach macht daraus 2 – bei genau 1000 kPa stimmt die Zehnerpotenz nicht mehr. Zähl vor dem floor eine winzige Korrektur dazu, zum Beispiel 0,000001.
log von 0 ergibt minus unendlich, log einer negativen Zahl NaN. Prüf den Wert vorher, etwa mit sgtz ok x, und behandle Vakuum als eigenen Fall.
Übung
Aufgabe
Ein Rohr-Analysator „Lager“ misst Drücke zwischen fast 0 und 50 000 kPa. Zwei LED-Anzeigen zeigen den Wert als Zehnerpotenz:
- „Exponent“ = floor(log10(p)), also 2 bei 101,3 kPa
- „Mantisse“ = p / 10^Exponent, also 1,013
- Vakuum (p ≤ 0): beide Anzeigen 0
- Analysator weg: beide −1
Messen und Ausgabe stehen schon da. Rechne log10 über LN10 und zähl vor dem floor die Korrektur KORR dazu.
Hinweise
Hinweis 1
Exponent: log e p, div e e LN10, add e e KORR, floor e e.
Hinweis 2
Mantisse: pow m BASIS e ergibt 10^e, dann div m p m.
Hinweis 3
Bei Vakuum wird log minus unendlich und die Mantisse NaN – die select-Zeilen mit ok fangen das schon ab.
Quiz
5 Fragen. Ab 60 % ist das Quiz bestanden – die Auswertung macht der Server.
Tag abschließen
- Übung im Simulator bestanden
- Quiz mit mindestens 60 % bestanden
Ohne Konto wird der Fortschritt nur in diesem Browser gespeichert.
Fehler in dieser Lektion melden
Zum Melden bitte anmelden. Anmelden