Fließkomma Arithmetik in Sicherheits-kritischen Systemen


  • Mod

    Das ist ein konkreter Fall von meiner Maschine, die bei bestimmten Kennwertverhalten etwas tun soll. Es ist doch egal, ob dein Schutzfeld 52.5734830 Meter vor dir endet oder 52.5734831. Wenn du das so knapp kalkulierst, machst du etwas falsch. Hauptsache es fängt an zu bremsen wenn da ein Objekt 52 Meter oder weniger vor dir auftaucht, und ich hoffe du hast genügend Puffer vorgesehen, dass auch 45 Meter noch reichen würden, wenn du 52.5734830 berechnet hast.

    Man könnte auch ein Argument für eine Festkommazahl für so eine Anwendung machen, weil beim Bremsweg die Größenordnungen der beteiligten Zahlen vermutlich immer ungefähr gleich sein dürfte, aber das kann nur der Macher des Systems mit Sicherheit sagen. Aber Festkommazahlen bringen ja keinen direkten Vorteil, außer ein paar Bit mehr Genauigkeit bei gleicher Hardware, und ob man nun wirklich 32 statt 24 Bit braucht um die 52.5734830 Meter noch ein paar Stellen genauer berechnen zu können, bezweifle ich.



  • @SoIntMan sagte in Fließkomma Arithmetik in Sicherheits-kritischen Systemen:

    Aber Sepp, mal angenommen ein Auto Assistenz-System möchte sicher Bremsen, wenn ein Objekt in den Geschwindigkeit-Schutzfeld kommt, mit Radar system Kamera o.ä. ich denke da Läufte das ganze ja auch auf Fließkomma Berechnungen!?

    Und was machst du, wenn ein Sensor ausfällt? Oder wenn ein Sensor Müll liefert? Selbst die besten Sensoren sind nicht von Ausreißern gefeilt.

    Du muss im sicherheitskritischen Bereich unabhängig von evt. double Problemen eh auf Probleme bei Sensorfehlern oder Regelgrößen achten. Eine Vollbremsung z.B. beim autonomen Fahren nur weil ein Sensor ausfällt, ist sicherlich nicht gut.

    Und wenn du im sicherheitskritischen Bereich bist, so wird oftmals auch ein Test auf der Zielplatform gemacht. Und dann dürften die Testreihen bei (double) Problemen anschlagen.


  • Mod

    Was hat das mit der Zahlendarstellung zu tun? Die Messgröße ist "Auto bremst auch bei ausgefallenem Sensor", nicht "Bit 24837393 im Speicher muss eine 0 sein"



  • @SeppJ sagte in Fließkomma Arithmetik in Sicherheits-kritischen Systemen:

    Was hat das mit der Zahlendarstellung zu tun? Die Messgröße ist "Auto bremst auch bei ausgefallenem Sensor", nicht "Bit 24837393 im Speicher muss eine 0 sein"

    Was meinst du denn damit?

    Ich beziehe mich auf folgende generelle Aussage:

    Aus meinem bisherigen Kenntnisstand und auch Erfahrung in Projekten mit Sicherheits-kritischen Systemen wird bisher auf Fließkomma Arithmetik in Berechnungen verzichtet, da nicht sichergestellt werden kann , dass immer die "selben" Ergebnisse erwartet werden können auf unterschiedlichen Hardware Plattformen.

    Und da bin ich mir nicht sicher woher diese Forderung kommt. Ist es wirklich ein Problem, oder ein mögliches numerisches Problem, oder eine Art Code Styling Regel wie z.B. Mirsa C oder als "Schutz" vor gewissen Seiteneffekten (z.B. exakter Vergleich auf Fließkommazahlen)?

    Und ich sage in einem sicherheitskritischen System muss man eh fehlertolerant sein und exzessiv testen. Und dies gilt um so mehr, je hardware-näher man ist. Und dann kann man ruhig sagen "Don't panic, in einem sauberen Entwicklungsprozess muss ein Fließkomma-Problem auffallen. Sonst hat man ein generelles Problem."

    Von daher halte ich einen Verzicht auf Fließkomma Arithmetik als nicht sinnvoll.

    BTW: Ich hätte auch keinen Spaß daran eine GNSS Berechnung geozentrische Koordinaten -> UTM Koordinate ohne Fließkomma Arithmetik zu machen. Und da ist selbst mit double nicht viel Spielraum.

    Und ich mache noch eine Aussage: In einem sicherheitskritischen System wird ein Programm nicht einfach auf einer Hardware laufen gelassen ohne zuvor einen Qualifizierungstest durchlaufen zu haben.


  • Mod

    Ahh, dann habe ich deine Aussage glaube ich falsch verstanden.



  • @SeppJ sagte in Fließkomma Arithmetik in Sicherheits-kritischen Systemen:

    Das ist ein konkreter Fall von meiner Maschine, die bei bestimmten Kennwertverhalten etwas tun soll. Es ist doch egal, ob dein Schutzfeld 52.5734830 Meter vor dir endet oder 52.5734831. Wenn du das so knapp kalkulierst, machst du etwas falsch. Hauptsache es fängt an zu bremsen wenn da ein Objekt 52 Meter oder weniger vor dir auftaucht, und ich hoffe du hast genügend Puffer vorgesehen, dass auch 45 Meter noch reichen würden, wenn du 52.5734830 berechnet hast.

    Ja da hast du recht, ich denke da kann mit einer Genauigkeit von 2 stellen nach dem Komma umgegangen werden.

    @Quiche-Lorraine sagte in Fließkomma Arithmetik in Sicherheits-kritischen Systemen:

    Und da bin ich mir nicht sicher woher diese Forderung kommt. Ist es wirklich ein Problem, oder ein mögliches numerisches Problem, oder eine Art Code Styling Regel wie z.B. Mirsa C oder als "Schutz" vor gewissen Seiteneffekten (z.B. exakter Vergleich auf Fließkommazahlen)?
    Und ich sage in einem sicherheitskritischen System muss man eh fehlertolerant sein und exzessiv testen. Und dies gilt um so mehr, je hardware-näher man ist. Und dann kann man ruhig sagen "Don't panic, in einem sauberen Entwicklungsprozess muss ein Fließkomma-Problem auffallen. Sonst hat man ein generelles Problem."
    Von daher halte ich einen Verzicht auf Fließkomma Arithmetik als nicht sinnvoll.

    Das ist eine interessant. Die Problematik ist ehr diese, wenn man z.b 2 Kanal Hardware hat, und jeder Kanal auch ne andere CPU Architektur verwendet. Da ist wohl nicht sicherzustellen dass beide CPUs"exakt" die selben Ergebnisse liefern.

    Mal angenommen das Ergebnisse muss auf nur 2 Stellen nach dem Komma genau sein, und bei de CPUs liefern bis dahin auch die selben Ergebnisse, aber haben bis auf die 5 stelle unterschiedliche zahlen. Ob das dann Sichheitstechnisch toleriert werden kann. Gedankenspiel.

    Bei 2 Kanaliger HW mit den selben CPUs muss ja definitiv die selben Ergbenisse liefern, da muss aber davon ausgegangen werden dass die arithmetik keine fehler halt, welche im obigen beispiel ehr ausgeschlossen werden kann.



  • @SoIntMan sagte in Fließkomma Arithmetik in Sicherheits-kritischen Systemen:

    Bei 2 Kanaliger HW mit den selben CPUs muss ja definitiv die selben Ergbenisse liefern, da muss aber davon ausgegangen werden dass die arithmetik keine fehler halt, welche im obigen beispiel ehr ausgeschlossen werden kann.

    Das würde ich so nicht unterschreiben. Man stelle sich vor eine Kanalsoftware wäre mit Visual Studio 6 und die andere mit Visual Studio 2019 kompiliert worden. Da hat sich einiges bezüglich Gleitkommamodell getan (z.B. /fp:strict), bei den sprintf Funktionen hat sich das Rounding verändert und der Optimierer ist aggresiver geworden und hat mir meine Kahan Summe wegoptimiert :->

    Benutzt jeder Kanal eigene Sensoren, so können diese fast keine selben Ergebnisse liefern. Denn jeder Sensor rauscht von Natur aus. Und da stellt sich mir die Frage wie wiederholgenau ein Sensor ist. Und ferner wie numerisch stabil ein evt. Verarbeitungsalgorithmus.

    Ein Beispiel: Bei einer wiederholten GNSS / GPS Messung wird ein Unterschied im Längengrad von 0.05° entdeckt. Ist das viel? Eine Abschätzung: tan(0.05°) = Diff / Erdradius -> Diff = tan(0.05°) * Erdradius = tan(0.05°) * 6370 km = 5,558km. Und so nimmt die Drohne einen Ausflug in die Pampa anstatt ihr Paket abzuliefern.



  • @SoIntMan sagte in Fließkomma Arithmetik in Sicherheits-kritischen Systemen:

    Das ist eine interessant. Die Problematik ist ehr diese, wenn man z.b 2 Kanal Hardware hat, und jeder Kanal auch ne andere CPU Architektur verwendet. Da ist wohl nicht sicherzustellen dass beide CPUs"exakt" die selben Ergebnisse liefern.

    Das ist aktuell noch nicht einmal bei derselben CPU gewährleistet! Wenn man multithreaded Algorithmen nutzt, dann hängt es von diversen externen Faktoren ab, ob das Ergebnis gleich ist oder nicht. Das Assoziativgesetz ist bei Gleitkommaarithmetik nämlich nicht erfüllt: A+(B+C)(A+B)+CA+(B+C) \neq (A+B)+C.



  • Mensch, das ist ja ein spannendes Thema. Würde Problematisch wäre es denn wenn man statt der build-in fpu eine Lib wie z.b. https://en.wikipedia.org/wiki/Libfixmath#History verwenden würder, welche alles in fix-komm rechnet? Abgehen das so die performance vermutlich wesentlich schlechter ist.

    Und ja ich würde mal davon ausgehen, dass bei Kanäle exakt den selben Input (selbe Sensor) verwenden.


  • Mod

    @SoIntMan sagte in Fließkomma Arithmetik in Sicherheits-kritischen Systemen:

    Mensch, das ist ja ein spannendes Thema. Würde Problematisch wäre es denn wenn man statt der build-in fpu eine Lib wie z.b. https://en.wikipedia.org/wiki/Libfixmath#History verwenden würder, welche alles in fix-komm rechnet? Abgehen das so die performance vermutlich wesentlich schlechter ist.

    Ich verstehe immer noch nicht, wo du hier ein Problem siehst. Der Output der Kanäle ist so etwas wie "jetzt bremsen" oder "jetzt nicht bremsen". Nicht 43.328329377324.

    Und ja ich würde mal davon ausgehen, dass bei Kanäle exakt den selben Input (selbe Sensor) verwenden.

    Lol, was? Dann kannst du dir Redundanz auch sparen, wenn du das kritischste und gefährdetste Bauteil davon aussparst.


Anmelden zum Antworten