Das Wissen aller Anwender nutzen

Im Allplan Connect Forum tauschen sich Anwender aus, geben wertvolle Tipps oder beraten sich bei ganz konkreten Aufgabenstellungen − auch international.
Und damit wirklich keine Frage unbeantwortet bleibt, unterstützen die Mitarbeiter des Technischen Supports ebenfalls aktiv das Forum.

Es erwarten Sie:

  • Foren-Vielfalt aus CAD Architektur, CAD Ingenieurbau uvm.
  • Tipps von User für User
  • international: Deutsch, Englisch, Italienisch, Französisch und Tschechisch

Melden Sie sich jetzt an und diskutieren Sie mit!

Zur Registrierung

[Frage] Rundungsproblem bei SmartPart [Gelöst]

Schlagworte:
  • Smartparts

Hallo zusammen

Ab und zu stolpert man noch wieder über ein Problem, für das man selber keine Lösung findet, auch nach langer Suche. Bevor ich noch mehr Stunden investiere, hat jemand vielleicht einen Typ:

Über das Eingabefenster werden folgende Parameter festgelegt:
laenge = 0.3
n = 2

Danach soll der Parameter e festgelegt werden:

IF ( laenge - 0.1 ) / ( n - 1 ) >= 0.25 THEN e = 0.250
IF ( laenge - 0.1 ) / ( n - 1 ) < 0.25 AND ( laenge - 0.1 ) / ( n - 1 ) >= 0.20 THEN e = 0.200
IF ( laenge - 0.1 ) / ( n - 1 ) < 0.20 AND ( laenge - 0.1 ) / ( n - 1 ) >= 0.167 THEN e = 0.167
IF ( laenge - 0.1 ) / ( n - 1 ) < 0.167 AND ( laenge - 0.1 ) / ( n - 1 ) >= 0.125 THEN e = 0.125
IF ( laenge - 0.1 ) / ( n - 1 ) < 0.125 THEN e = 0.100
PARAMETERS e = e

Nach den Formeln ergibt dies nun:
( laenge - 0.1 ) / ( n - 1 ) = ( 0.3 - 0.1 ) / ( 2 - 1 ) = 0.2 / 1 = 0.2

somit müsste das SmartPart aus meiner Sicht nun e = 0.200 setzen.

Leider setzt das SmartPart aber in diesem Fall e = 0.167, da er das Ergebnis als < 0.20 wertet.

Kontrolle:

PRINT n / Ergebnis 2
PRINT laenge / Ergebnis 0.3
PRINT ( laenge - 0.1 ) / ( n - 1 ) / Ergebnis 0.2 (wäre soweit korrekt)

PRINT ( laenge - 0.1 ) / ( n - 1 ) = 0.20 / Ergebnis 0 (falsch), scheint doch nicht 0.2 zu sein
PRINT ( laenge - 0.1 ) / ( n - 1 ) < 0.20 / Ergebnis 1 (richtig), das Ergebnis scheint also kleiner als 0.2 zu sein
PRINT ( laenge - 0.1 ) / ( n - 1 ) > 0.20 / Ergebnis 0 (falsch)

Aus Gründen, die mir momentan noch nicht einleuchten, scheint das Ergebniss von 0.200 abzuweichen. Er zeigt bei PRINT 0.2 als Ergebnis an, scheint für die weiteren Rechnungen aber mit einer Zahl kleiner 0.2 zu rechnen.

Hat jemand hier eine Lösung zu diesem Problem?

Vielen Dank!

Lösung anzeigen Lösung verbergen

Guten Morgen.

Das gleiche Problem hatte ich auch vor einer Weile und da wurde das so geklärt und gelöst:
https://connect.allplan.com/de/forum/themen/topic/topics/cad-smartparts/bitte-um-hilfe-bei-der-fehlersuche-rundungsfehler-im-smartpart.html

Das Problem ist, dass Nachkommastellen beim internen Umwandeln in binäre Zahlen nicht exakt dargestellt werden können und in Deinem Zwischenschritt z.B. 0.3 als 0.299999999999999988898 interpretiert wird.

Da müsstest Du noch irgendwo eine Zwischenrundung einbauen.

lg,
Stefan

GEA Arquitectos S.L.P.
Calle Gerardo Diego 6A | 41013 Sevilla | Spain

Guten Morgen.

Das gleiche Problem hatte ich auch vor einer Weile und da wurde das so geklärt und gelöst:
https://connect.allplan.com/de/forum/themen/topic/topics/cad-smartparts/bitte-um-hilfe-bei-der-fehlersuche-rundungsfehler-im-smartpart.html

Das Problem ist, dass Nachkommastellen beim internen Umwandeln in binäre Zahlen nicht exakt dargestellt werden können und in Deinem Zwischenschritt z.B. 0.3 als 0.299999999999999988898 interpretiert wird.

Da müsstest Du noch irgendwo eine Zwischenrundung einbauen.

lg,
Stefan

GEA Arquitectos S.L.P.
Calle Gerardo Diego 6A | 41013 Sevilla | Spain

Hallo,

Ich bestätige das.
Es geht tatsächlich um die binäre Verwaltung von Gleitkommazahlen.
Die Verwaltung mit einer Rundung ist notwendig.


Wunderbar, ich danke Euch für die Hilfestellung. Das war in der Tat die Lösung und das Problem ist nun behoben!