Positionen im Streckeneditor bei hohen Kilometrierungswerten

  • Hallo,


    der Streckeneditor speichert bei den Positionsangaben der Gleiseigenschaften, z.B. Signalpositionen nur bis zu 6 Stellen. Ich kann also bei Strecken, auf denen ich über Streckenkilometer 100,0 komme, Positionen zwar noch so genau angeben, wie ich möchte (z.B. 103263.85), aber rufe ich die Gleiseigenschaft nochmal auf, werden nur noch die ersten 6 Stellen angezeigt, also 103264, ändere ich den Positionswert dann nicht wieder, rutscht das Objekt plötzlich an eine andere Position als die vorgesehene, nur unter 10000m ist damit ein zentimetergenaues Arbeiten möglich. Ist es möglich, die Anzahl der Stellen zu erhöhen? Es wäre zwar möglich, dies zu umgehen, indem die Kilometrierung entsprechend niedriger angesetzt wird und über die entsprechende Funktion in den Gleiseigenschaften wieder richtig gesetzt, ich arbeite wo möglich aber lieber direkt mit den richtigen Kilometrierungsangaben, da ich somit die Werte aus Gleisplänen direkt übernehmen kann, ohne umrechnen zu müssen.


    Gruß, Klaus

  • Hm, ich denke, das ist ein Dialogproblem...


    Nur damit ich es richtig verstehe:
    Angezeigt werden xxxxx0.9, beim Aufruf des Eingabedialogs wird aber xxxxx1 angeboten.
    Richtig verstanden?


    Gruss
    Uwe

    --
    Wenn du die Götter zum Lachen bringen willst, mach’ einen Plan.

  • Ich hatte es mir vorhin angesehen. Interessanter Fehler. Ticket #170


    Gruss
    Uwe

    --
    Wenn du die Götter zum Lachen bringen willst, mach’ einen Plan.

  • Ui, das ist ein hochinteressantes und gleichzeitig relativ komplexes Problem. Da bin ich auch gleich daran interessiert :)


    Im LoksimEdit werden nur 6 signifikante Ziffern angezeigt. Diese "6" ist jetzt nicht einfach aus der Luft gegriffen sondern das liegt an der Darstellung von Gleitkommazahlen im Computer. Für die Mathematiker unter uns:

    Zitat

    This is the number of decimal digits of precision for the float data type. Technically, if p and b are the precision and base (respectively) for the representation, then the decimal precision q is the maximum number of decimal digits such that any floating point number with q base 10 digits can be rounded to a floating point number with p base b digits and back again, without change to the q decimal digits.


    The value of this macro is supposed to be at least 6, to satisfy ISO C.


    Kurz gesagt, bei mehr als 6 signifikanten Ziffern ist es nicht mehr garantiert, dass eine Umwandlung Dezimal <--> Darstellung im PC in beide Richtungen verlustfrei möglich ist.


    Hmhm, es wäre schon möglich die signifikanten Ziffern hochzudrehen, ich frage mich nur ob das dann eher in der Art vom Regen in die Traufe ist.


    Grundsätzlich ist es so, dass es besser ist bei kleineren Werten zu bleiben und die Kilometrierung entsprechend niedriger zu wählen. Ich muss ein wenig überlegen, ob es auch eine andere Möglichkeit gibt... Numerische Mathematik ist mir leider nicht so geläufig wie ich es mir manchmal wünschen würde :(


    lg
    Lukas

  • Hallo Lukas,


    interessante Sache ...


    Zitat

    Kurz gesagt, bei mehr als 6 signifikanten Ziffern ist es nicht mehr garantiert, dass eine Umwandlung Dezimal <--> Darstellung im PC in beide Richtungen verlustfrei möglich ist.


    Gerade im Strecken-(aber auch Objekt)editor werden aber schon jetzt gesetzte Werte teilweise mit zig Dezimalstellen ergänzt:


    [Blockierte Grafik: http://www.veb-verkehr.de/bilder/beta/Rundungswerte.png]


    Eingegeben wurde jeweils nur eine Nachkommastelle.


    Gruß, Klaus

  • Hallo Klaus,


    diese öminösen Nachkommastellen sind der computerinternen Darstellung bzw. Speicherung geschuldet.
    Wenn man genau nachrechnet, wird man bei irgendwas von Basis 2 herauskommen.
    Eigendlich! sollte das nicht so sein...
    Wenn ich mich recht erinnere wird der rechnerinterne Wert in den Dialog zurück gereicht anstatt den eingegeben. Das ist insbesondere störend, wenn man mit Fahrleitungen arbeitet.
    Also wenn die Schmerzen bei mir groß genug sind, werde ich für Abhilfe sorgen. ;)


    Gruss
    Uwe

    --
    Wenn du die Götter zum Lachen bringen willst, mach’ einen Plan.

  • Hallo Uwe,


    an die zusätzlichen Stellen habe ich mich gewöhnt, nur die Sache dass nach dem Öffnen und Schließen des Dialogs das Signal plötzlich nen halben Meter nach vorne rückt mag ich tatsächlich nicht ;)


    Gruß, Klaus


  • Gerade im Strecken-(aber auch Objekt)editor werden aber schon jetzt gesetzte Werte teilweise mit zig Dezimalstellen ergänzt:


    Hm ja, ich glaube da gibt es ein paar Unterschiede je nachdem wo die Zahl angezeigt wird. Diese vielen Nachkommastellen zeigen den eigentlich intern gespeicherten Wert an. Wird der Wert gerundet sind die ersten 6 Stellen aber garantiert genau die gleichen ersten 6 die auch eingegeben wurden.


    Lassen wir es jetzt zB zu, dass 7 Stellen eingegeben werden, kann es sein, dass nach dem Aktualisieren der Anzeige plötzlich die 7. Stelle verändert ist. Ich meine wir lassen schon jetzt beliebig viele Stellen zu, aber man bekommt wie Du relativ schnell mit, dass eigentlich nur 6 signifikant sind und "sobald wie möglich" auf 6 gerundet wird. Ja, es ist da etwas "gefährlich", dass trotzdem mehr Stellen abgespeichert werden und die dann nur beim neumaligen Öffnen des Dialogs verloren gehen. Die Frage ist was eher gefährlich ist ;) Und ja, es ist auch nicht optimal, dass an manchen Stellen mehr wie die 6 Stellen angezeigt werden.


    Ein weiteres Problem, dass sich durch eine Erhöhung der signifikanten Ziffern ergeben würde, ist dass dann viel öfter viele "unbewusste" Nachkommastellen wie in Deinem Screenshot angezeigt werden würden. Also würden wir zB 10 signifikante Stellen anzeigen, würde bei der Eingabe von
    100000,45 plötzlich 100000,4531 dastehen. Auch nicht optimal, allerdings haben wir das an manchen Stellen jetzt schon so


    Die Frage ist ob wir eher dahin tendieren, diese 6 Stellen Beschränkung möglichst überall einzuführen oder ob wir es dem Benutzer überlassen. Theoretisch müsste dem Benutzer aber dann bewusst sein, dass es Ungenauigkeiten geben kann - je größer die Zahl desto heftiger.


    Wenn jemand also mehr als 6 signifikante Stellen verwendet, können wir technisch auch gar nicht mehr garantieren diese verarbeiten zu können! Das kommt dann auf die exakte Zahl an. Bei Zahl x bleiben die ersten 7 Stellen gleich, bei Zahl y nicht und das Signal wird tatsächlich (auch in der Simulation) verschoben. Also aus technischer Sicht würde ich eher zur Lösung tendieren, die Gleiskilometrierung anzupassen...


    [Edit]Zum Austesten kann mann zB diese Seite verwenden http://www.binaryconvert.com/convert_float.html[/Edit]