| |
 | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
 | NVIDIA GTC Paris und ISC High Performance-Konferenz 2025, eine Pressemitteilung
|
Autor
|
Thema: 70.0 ist ungleich 70.0 ?? (827 mal gelesen)
|
Peter2 Ehrenmitglied V.I.P. h.c.

 Beiträge: 3882 Registriert: 15.10.2003 Win 10 bzw. 11 / 64 Pro AutoCAD MAP 3D 2023 BricsCAD 24
|
erstellt am: 08. Apr. 2005 13:41 <-- editieren / zitieren --> Unities abgeben:         
Ich habe einen Koordinatenwert (DXF-Code 10): (10 210.0 501.0 0.0) und den Fangwert 3.00000. Um zu prüfen, ob DXF-10 genau am Fangpunkt sitzt (= vielfaches von Fang), dividiere ich x-Wert durch Fang - einmal als normale Division mit normalem Ergebnis und dann gerundet auf ganze Zahl. Code: (if (= (/ (car ts_10) (car (getvar "snapunit"))) (fix (/ (car ts_10) (car (getvar "snapunit")))))
also hier: 210 / 3 = 70.0 und 210 / 3 = 70 (mit fix gerundet auf ganze) Alle Mathematiklehrer werden mir zustimmen, dass 70.0 gleich 70 ist. AutoCAD ist anderer Meinung und gibt NIL als Rückgabe von IF aus. Man könnte einwenden, dass die erste Zahl eine Real ist und die zweite eine Integer. Also mache ich aus der zweiten auch eine Real. Code: (if (= (/ (car ts_10) (car (getvar "snapunit"))) (* 1.0 (fix (/ (car ts_10) (car (getvar "snapunit"))))))
Auch hier meint AutoCAD, dass 70.0 nicht gleich 70.0 ist. Nächster Einwand: "aber die Nachkommastellen .." Gibt es hier aber nicht: 210.0 hat keine Nachkommastellen, 3.0 auch nicht und 70.0 wird mit rtos und 20 Nachkommastellen auch nur zu "70". Was ist hier los? Axel hat einmal in einem Posting ausführlich die Problematik "Fliesskomma" usw. behandelt, aber gilt das auch hier? Zwei identische Divisionen die sich glatt ausgehen - und dennoch anders??? Schönes Wochenende Peter
------------------ Für jedes Problem gibt es eine einfache Lösung. Die ist aber meistens falsch. ;-) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
       

 Beiträge: 13530 Registriert: 30.11.2003 .
|
erstellt am: 08. Apr. 2005 13:44 <-- editieren / zitieren --> Unities abgeben:          Nur für Peter2
|
Peter2 Ehrenmitglied V.I.P. h.c.

 Beiträge: 3882 Registriert: 15.10.2003 Win 10 bzw. 11 / 64 Pro AutoCAD MAP 3D 2023 BricsCAD 24
|
erstellt am: 08. Apr. 2005 13:59 <-- editieren / zitieren --> Unities abgeben:         
Zitat: Original erstellt von CADmium: nimm equal zum vergleichen!
leider keine Änderung. Wenn ich die beiden Divisionen einzeln ausführe, kommt gleiches Ergebnis; die Abfrage ergibt Unterschiede: Code:
Befehl: !ts_10 (249.0 357.0 0.0)Befehl: (/ (car ts_10) (car (getvar "snapunit"))) 83.0 Befehl: (* 1.0 (fix (/ (car ts_10) (car (getvar "snapunit"))))) 83.0 Befehl: (equal (/ (car ts_10) (car (getvar "snapunit"))) (* 1.0 (fix (/ (car ts_10) (car (getvar "snapunit")))))) nil
Peter
------------------ Für jedes Problem gibt es eine einfache Lösung. Die ist aber meistens falsch. ;-) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
       

 Beiträge: 13530 Registriert: 30.11.2003 .
|
erstellt am: 08. Apr. 2005 14:02 <-- editieren / zitieren --> Unities abgeben:          Nur für Peter2
so : (equal 70 70.0 0.0000001) und siehe F1 im vlide! equal Function Determines whether two expressions are equal (equal expr1 expr2 [fuzz]) Arguments expr1 The expression to be compared. expr2 The expression to compare with expr1. fuzz A real number defining the maximum amount by which expr1 and expr2 can differ and still be considered equal. When comparing two real numbers (or two lists of real numbers, as in points), the two identical numbers can differ slightly if different methods are used to calculate them. You can specify a fuzz amount to compensate for the difference that may result from the different methods of calculation. ------------------ - Thomas - "Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben." [Diese Nachricht wurde von CADmium am 08. Apr. 2005 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Peter2 Ehrenmitglied V.I.P. h.c.

 Beiträge: 3882 Registriert: 15.10.2003 Win 10 bzw. 11 / 64 Pro AutoCAD MAP 3D 2023 BricsCAD 24
|
erstellt am: 08. Apr. 2005 14:11 <-- editieren / zitieren --> Unities abgeben:         
Danke - jetzt läuft es. Aber das "Warum" (der Hintergrund) ist mir nicht klar - "muss" ich jetzt "immer" equal fuzzy anstelle "=" verwenden? Peter ------------------ Für jedes Problem gibt es eine einfache Lösung. Die ist aber meistens falsch. ;-) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
       

 Beiträge: 13530 Registriert: 30.11.2003 .
|
erstellt am: 08. Apr. 2005 14:13 <-- editieren / zitieren --> Unities abgeben:          Nur für Peter2
muss" ich jetzt "immer" equal fuzzy anstelle "=" verwenden?bei solchen Werten : JA! ------------------ - Thomas - "Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben." Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Peter2 Ehrenmitglied V.I.P. h.c.

 Beiträge: 3882 Registriert: 15.10.2003 Win 10 bzw. 11 / 64 Pro AutoCAD MAP 3D 2023 BricsCAD 24
|
erstellt am: 08. Apr. 2005 14:17 <-- editieren / zitieren --> Unities abgeben:         
Zitat: Original erstellt von CADmium: [b]muss" ich jetzt "immer" equal fuzzy anstelle "=" verwenden?bei solchen Werten : JA! [/B]
Was sind "solche Werte"? Liegt es am FIX oder an der Division selbst oder was ist das "besondere" an meiner Rechnung? Peter ------------------ Für jedes Problem gibt es eine einfache Lösung. Die ist aber meistens falsch. ;-) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
spider_dd Mitglied
   
 Beiträge: 1151 Registriert: 27.11.2003 Win 10Pro Intel(R) Core(TM) i7-7700 NVIDIA Quadro P1000 ACAD, Civil-3D 2018
|
erstellt am: 08. Apr. 2005 18:03 <-- editieren / zitieren --> Unities abgeben:          Nur für Peter2
|

| |
Dabrunz Mitglied
 
 Beiträge: 127 Registriert: 28.05.2003
|
erstellt am: 11. Apr. 2005 11:50 <-- editieren / zitieren --> Unities abgeben:          Nur für Peter2
Tag zusammen - komme z.Zt. wirklich nur zw. Tür und Angel zum Reinschauen hier, aber ein paar Dinge will ich dennoch zum besten geben: Zitat: Original erstellt von Peter2: Was sind "solche Werte"? Liegt es am FIX oder an der Division selbst oder was ist das "besondere" an meiner Rechnung?
Einerseits kann ich dich beruhigen, denn daran ist nix besonderes und du machst auch in der Anwendung der Funktionen keinen Fehler, andererseits muss ich dir einige schlaflose Nächte bereiten, denn die Rundungsfehler wie sie hier auftreten sind durch die Floatingpoint-Artimetik an sich begründet und lassen sich somit nicht umgehen. Siehe hierzu: eine kurze Erläuterung wie REAL-Zahlen dargestellt werden Achim Dabrunz ------------------ Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |