Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  70.0 ist ungleich 70.0 ??

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte
Autor Thema:  70.0 ist ungleich 70.0 ?? (767 mal gelesen)
Peter2
Ehrenmitglied V.I.P. h.c.




Sehen Sie sich das Profil von Peter2 an!   Senden Sie eine Private Message an Peter2  Schreiben Sie einen Gästebucheintrag für Peter2

Beiträge: 3701
Registriert: 15.10.2003

Win 10/64 Pro
AutoCAD MAP 3D 2018
BricsCAD 22

erstellt am: 08. Apr. 2005 13:41    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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




Sehen Sie sich das Profil von CADmium an!   Senden Sie eine Private Message an CADmium  Schreiben Sie einen Gästebucheintrag für CADmium

Beiträge: 13508
Registriert: 30.11.2003

.

erstellt am: 08. Apr. 2005 13:44    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Peter2 10 Unities + Antwort hilfreich

nimm equal zum vergleichen!

------------------
- 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.




Sehen Sie sich das Profil von Peter2 an!   Senden Sie eine Private Message an Peter2  Schreiben Sie einen Gästebucheintrag für Peter2

Beiträge: 3701
Registriert: 15.10.2003

Win 10/64 Pro
AutoCAD MAP 3D 2018
BricsCAD 22

erstellt am: 08. Apr. 2005 13:59    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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




Sehen Sie sich das Profil von CADmium an!   Senden Sie eine Private Message an CADmium  Schreiben Sie einen Gästebucheintrag für CADmium

Beiträge: 13508
Registriert: 30.11.2003

.

erstellt am: 08. Apr. 2005 14:02    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Peter2 10 Unities + Antwort hilfreich

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.




Sehen Sie sich das Profil von Peter2 an!   Senden Sie eine Private Message an Peter2  Schreiben Sie einen Gästebucheintrag für Peter2

Beiträge: 3701
Registriert: 15.10.2003

Win 10/64 Pro
AutoCAD MAP 3D 2018
BricsCAD 22

erstellt am: 08. Apr. 2005 14:11    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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




Sehen Sie sich das Profil von CADmium an!   Senden Sie eine Private Message an CADmium  Schreiben Sie einen Gästebucheintrag für CADmium

Beiträge: 13508
Registriert: 30.11.2003

.

erstellt am: 08. Apr. 2005 14:13    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Peter2 10 Unities + Antwort hilfreich

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.




Sehen Sie sich das Profil von Peter2 an!   Senden Sie eine Private Message an Peter2  Schreiben Sie einen Gästebucheintrag für Peter2

Beiträge: 3701
Registriert: 15.10.2003

Win 10/64 Pro
AutoCAD MAP 3D 2018
BricsCAD 22

erstellt am: 08. Apr. 2005 14:17    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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



Sehen Sie sich das Profil von spider_dd an!   Senden Sie eine Private Message an spider_dd  Schreiben Sie einen Gästebucheintrag für spider_dd

Beiträge: 1111
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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Peter2 10 Unities + Antwort hilfreich

Hallo Peter,

bei Fließkommaoperationen gibt es manchmal "erstaunliche" Ergebnisse.
siehe z. B. auch hier
http://www.lahey.com/float.htm

ebenfalls schönes WE

spider

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Dabrunz
Mitglied



Sehen Sie sich das Profil von Dabrunz an!   Senden Sie eine Private Message an Dabrunz  Schreiben Sie einen Gästebucheintrag für Dabrunz

Beiträge: 127
Registriert: 28.05.2003

erstellt am: 11. Apr. 2005 11:50    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Peter2 10 Unities + Antwort hilfreich

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

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz