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

Tag 110 von 365 · Fortgeschritten · Monat 4: Netzwerk im Detail

Ungefähr null: sapz, snaz, bapz, bnaz

sapz und Co. prüfen im Spiel praktisch auf genau null: Ihre einzige wirksame Toleranz ist float.epsilon × 8. Für „fast null“ brauchst du abs und eine eigene Grenze.

Lektion 14 Min. Woche 16

Das lernst du heute

  • Kleinste Toleranz bei Null
  • brapz und brnaz
  • Epsilon ist nicht die Toleranz

Gestern hast du gesehen, dass eine relative Toleranz nahe null winzig wird. Die z-Varianten der ap-Befehle vergleichen mit null. Wer erwartet, dass sie „ungefähr null“ mit Spielraum prüfen, erlebt eine Überraschung.

Was sapz wirklich prüft

Im Spielcode ist sapz r? a c nichts anderes als sap r? a 0 c. Die Bedingung lautet also: Der Betrag von a ist höchstens max(c × Betrag von a, float.epsilon × 8).

Der erste Teil, c mal der Betrag von a, ist für jede Toleranz unter 1 kleiner als der Betrag selbst. Er hilft nie. Übrig bleibt die feste Untergrenze float.epsilon × 8, etwa 1,1 · 10⁻⁴⁴. Das ist die kleinste Toleranz, die es bei den ap-Befehlen gibt, und bei null ist sie die einzige, die greift.

Befehlergibt 1 bzw. springt, wenn
sapz r? a ca praktisch genau 0 ist
snaz r? a ca nicht praktisch genau 0 ist
bapz a c ziel / brapz a c nwie sapz, mit Sprung
bnaz a c ziel / brnaz a c nwie snaz, mit Sprung

sapz prüft also auf genau null, wie seqz. Ein Rechenrest aus 0.1 + 0.2 − 0.3 gilt nicht als null:

add r0 0.1 0.2
sub r0 r0 0.3      # r0 ist ein winziger Rest, nicht 0
sapz r1 r0 0.5     # r1 = 0

Epsilon ist nicht die Toleranz

Die Konstante epsilon gibt es auch. Sie ist etwa 5 · 10⁻³²⁴, die kleinste Zahl über null, die der Chip darstellen kann. Mit der Grenze float.epsilon × 8 der ap-Befehle hat sie nichts zu tun. Wer sap r0 a b epsilon schreibt, vergleicht praktisch exakt.

Ungefähr null mit eigener Grenze

Für „fast null“ brauchst du eine absolute Grenze in der Einheit des Werts:

sub diff innen aussen
abs diff diff
slt gleich diff 0.5        # weniger als 0,5 kPa Unterschied

Das funktioniert auch im Vakuum, wo die relative Toleranz von sap versagt. Die z-Befehle bleiben für Werte, die von Natur aus genau 0 sind: Zähler, Anzahlen, 0/1-Flaggen.

Achtung

Auch die z-Befehle behandeln NaN als weder null noch ungleich null: sapz und snaz liefern 0, bapz und bnaz springen nicht. Fang NaN vorher mit snan oder brnan ab, wenn es eine Rolle spielt.

Tipp

Die Toleranz c darfst du bei den z-Befehlen nicht weglassen, sonst stimmt die Zahl der Operanden nicht. Schreib 0 hin. Eine Toleranz ab 1 macht das Ergebnis immer wahr, und das hilft niemandem.

Schaubild

Vergleich und select als Weiche temp = 313 sgt r1 temp 303 r1 = 1 select Color.Red Color.Green 4 wenn r1 ≠ 0 wenn r1 = 0
Nahe null schrumpft jede relative Toleranz. Übrig bleibt nur die feste Untergrenze von etwa 1,1 · 10⁻⁴⁴.

Übung

Aufgabe

Vor der Schleuse:

  • Gassensoren „Kammer“ und „Vorraum“: Wandleuchte „Ausgleich“ an, wenn die Drücke weniger als 0,5 kPa auseinanderliegen – auch im Vakuum. Fehlt ein Sensor: aus.
  • Zwei Türen „Schleusentuer“: Blinklicht „Tueroffen“ an, sobald die Anzahl offener Türen nicht null ist. Benutze dafür snaz (die Summe über Open ist eine ganze Zahl und nie NaN).

Hinweise

Hinweis 1

Ausgleich: sub, abs, dann slt gleich diff GRENZE. NaN macht slt von selbst zu 0.

Hinweis 2

Offene Türen: lbn … Open Sum zählt sie, weil jede offene Tür 1 meldet.

Hinweis 3

snaz warnen offen 0 ist 1, sobald mindestens eine Tür offen ist.

Quiz

4 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