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

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

Ungefähr gleich: sap, sna, bap, bna

Messwerte treffen nie genau. sap, sna, bap, bna, brap und brna vergleichen mit einer relativen Toleranz – und behandeln NaN als weder gleich noch ungleich.

Lektion 14 Min. Woche 16

Das lernst du heute

  • Warum seq bei Kommazahlen scheitert
  • Toleranz relativ angeben
  • brap und brna

Ein Mischtank soll genau 21 % Sauerstoff haben. Du prüfst seq ok o2 0.21, und es kommt nie 1 heraus, obwohl die Anzeige 21 % zeigt. Der Grund: Messwerte landen fast nie exakt auf einer Zahl.

Warum seq bei Kommazahlen scheitert

Der Chip rechnet mit Gleitkommazahlen. Viele Dezimalzahlen lassen sich darin nicht genau darstellen, und jede Rechnung schleppt kleine Reste mit:

add r0 0.1 0.2
seq r1 r0 0.3     # r1 = 0, r0 liegt knapp ueber 0.3

Ein Sensorwert, ein Mittelwert, eine Division: Alle landen knapp neben der glatten Zahl. seq, beq und breq vergleichen exakt und treffen deshalb fast nie.

Ungefähr gleich mit Toleranz

Die ap-Befehle (approximately) vergleichen mit Spielraum:

sap ok o2 0.21 0.05     # 1, wenn o2 hoechstens 5 % von 0.21 abweicht

Die Toleranz ist relativ: Erlaubt ist ein Abstand von c × max(|a|, |b|). Bei c = 0,05 sind das 5 % des größeren Betrags, für 0,21 also gut 0,01.

Befehlmacht
sap r? a b cr = 1, wenn a ≈ b
sna r? a b cr = 1, wenn a deutlich anders als b
bap a b c zielspringt, wenn a ≈ b
bna a b c zielspringt, wenn a deutlich anders als b
brap a b c nrelativ, wenn a ≈ b
brna a b c nrelativ, wenn a deutlich anders als b

Die Toleranz relativ angeben

Relativ ist praktisch, weil eine Toleranz für alle Größenordnungen passt: 2 % sind bei 100 kPa 2 kPa und bei 5000 kPa 100 kPa. Für Drücke, Temperaturen in Kelvin und Mischverhältnisse ist das meist genau richtig.

sap gleich innen aussen 0.02   # Druckausgleich auf 2 % genau
Achtung

Mit NaN ist der Abstand keine Zahl, also weder klein noch groß. Im Spielcode liefern dann sowohl sap als auch sna eine 0, und weder bap noch bna springen. Wer eine Tür mit sna sperrt, sperrt sie bei Sensorausfall also nicht. Bau sicherheitsrelevante Bedingungen mit sap/bap/brap und lass die freigebende Aktion nur dann laufen, wenn „ungefähr gleich“ wirklich zutrifft.

Tipp

Nahe null wird eine relative Toleranz winzig. 2 % von 0,01 kPa sind 0,0002 kPa. Im Vakuum sind 0,01 und 0 kPa deshalb nicht „ungefähr gleich“. Für Werte nahe null brauchst du eine absolute Grenze, darum geht es morgen.

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
sap liefert 1, wenn der Abstand höchstens c mal den größeren Betrag ausmacht. Die Toleranz wächst mit den Werten mit.

Übung

Aufgabe

Die Kammertür darf nur entsperrt sein, wenn der Druck in der Kammer ungefähr dem im Vorraum entspricht.

  • Gassensoren „Kammer“ und „Vorraum“, Tür „Kammertuer“, Wandleuchte „Ausgleich“
  • Toleranz 5 % relativ (TOL)
  • Lampe an und Lock 0, wenn beide Drücke ungefähr gleich sind, sonst Lampe aus und Lock 1
  • Fehlt ein Sensor: Lampe aus, Tür gesperrt

Benutze sap und brap (kein seq, beq, breq).

Hinweise

Hinweis 1

Ersetze seq durch sap gleich innen aussen TOL.

Hinweis 2

Tür: move sperre 0, dann brap innen aussen TOL 2 und move sperre 1.

Hinweis 3

Bei NaN springt brap nicht – die Tür bleibt dann gesperrt.

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