stationeers.de Mod-Werkstatt · Dominik1199
EN Anmelden
  1. Start
  2. IC10-Akademie
  3. Tag 144

Tag 144 von 365 · Fortgeschritten · Monat 5: Speicher und Struktur

sqrt, pow, exp und log

sqrt, pow, exp und log rechnen Wurzeln, Potenzen und Logarithmen. log ist der natürliche Logarithmus – log10 bekommst du nur über eine Division.

Lektion 15 Min. Woche 21

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:

RechnungErgebnis
pow r0 2 101024
pow r0 x 0.5wie sqrt r0 x
pow r0 10 -10,1
pow r0 -8 0.5NaN
sqrt r0 -4NaN

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.

Achtung

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.

Hinweis

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

Esc
↑ ↓ wählenEnter öffnen/ öffnet die Suche überall