Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  AutoCAD VBA
  Kann VBA nicht richtig rechnen?

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:  Kann VBA nicht richtig rechnen? (2610 mal gelesen)
TomiProg
Mitglied
Technischer Zeichner


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

Beiträge: 51
Registriert: 29.04.2004

WinNT4.0(SP6) + AutoCAD 14.01, P3/400MHz(gääähn),256MB,Graphtec KD4620, ATI 3D Rage Pro(8MB)

erstellt am: 25. Jun. 2004 13:20    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

Hallo, liebe Leuz

Da bin ich schon wieder mit einer Frage, die möglicherweise früher schon mal beantwortet wurde. Schaut auch mal den nachfolgenden Code an und probiert ihn mal aus. Ich möchte gerne wissen, warum es eine Diferenz zwischen den einzelnen X-Koordinaten gibt, die es eigentlich gar nicht geben dürfte? Ich vermute mal es hat was mit der Winkelberechnung zu tun. Kann mir jemand helfen, diese Diferenz zu vermeiden? Aber nicht auf Kosten der Genauigkeit (könnte ja auch die X-Werte auf- oder abrunden).

Sub WinkelTest()
    Dim Startpunkt(2) As Double, Absetzpunkte(2) As Double
    Dim PunktRückgabe As Variant, Auswahlpunkt(2) As Double
    Dim Winkel1 As Double, Winkel2 As Double, Winkel3 As Double
    Dim Util As AcadUtility, Länge As Double
   
    Set Util = ThisDrawing.Utility
   
    Länge = 500
    Startpunkt(0) = 0#: Startpunkt(1) = 0#
    Absetzpunkte(0) = 0#: Absetzpunkte(1) = 1500#
    Auswahlpunkt(0) = 0#: Auswahlpunkt(1) = 2000#
   
    Winkel1 = Util.AngleFromXAxis(Startpunkt, Absetzpunkte)
    Winkel2 = Util.AngleFromXAxis(Auswahlpunkt, Absetzpunkte)
   
    PunktRückgabe = Util.PolarPoint(Auswahlpunkt, Winkel2, Länge)
   
    Winkel3 = Util.AngleFromXAxis(Startpunkt, PunktRückgabe)
   
    Debug.Print "Winkel 1 = " & Winkel1
    Debug.Print "Winkel 2 = " & Winkel2
    Debug.Print "Winkel 3 = " & Winkel3
    Debug.Print "Absetzpunkte X = " & Absetzpunkte(0)
    Debug.Print "Startpunkt X = " & Startpunkt(0)
    Debug.Print "PunktRückgabe X = " & PunktRückgabe(0)
End Sub


Gruß
Tomi

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

TomiProg
Mitglied
Technischer Zeichner


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

Beiträge: 51
Registriert: 29.04.2004

WinNT4.0(SP6) + AutoCAD 14.01, P3/400MHz(gääähn),256MB,Graphtec KD4620, ATI 3D Rage Pro(8MB)

erstellt am: 25. Jun. 2004 14:27    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

Es genügt auch dieser kurze Code:

Sub Test()
    Dim Startpunkt(2) As Double, PunktRückgabe As Variant
    Dim Util As AcadUtility
    Set Util = ThisDrawing.Utility

    PunktRückgabe = Util.PolarPoint(Startpunkt, _
                    Util.AngleToReal("90", acDegrees), 1500)
    Debug.Print "Startpunkt X = " & Startpunkt(0)
    Debug.Print "PunktRückgabe X = " & PunktRückgabe(0)
End Sub


Tomi

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

startrek
Moderator
Architekt


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

Beiträge: 1361
Registriert: 13.02.2003

.

erstellt am: 25. Jun. 2004 15:31    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 TomiProg 10 Unities + Antwort hilfreich

Hi Tomi,

gute Frage, nächste Frage ... ;-)

Mach' mal:
Debug.Print Util.AngleToReal("90", acDegrees)
und setz' den Wert dafür ein:
PunktRückgabe = Util.PolarPoint(Startpunkt, 1.5707963267949, 1500)

da kommt wieder was andres raus.
Ich weiss auch nicht was hier 'intern' abgeht ???

Gruss Nancy

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

TomiProg
Mitglied
Technischer Zeichner


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

Beiträge: 51
Registriert: 29.04.2004

WinNT4.0(SP6) + AutoCAD 14.01, P3/400MHz(gääähn),256MB,Graphtec KD4620, ATI 3D Rage Pro(8MB)

erstellt am: 25. Jun. 2004 17:04    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

Hallo Nancy

Kann ich bestätigen. Ist schon kurios, das bei den selben Zahlenwerte unterschiedliche Ergebnisse herrauskommen. Bei mir hat er PunktRückgabe(0) = -5.23722506166407E-12 ausgegeben.

Kann nur eins bedeuten: Der CPU hat ein Fließkomma-Problem. Intel hatte damals Probleme damit. Wie das mit den neuen Chips (ab Pentium 3, denke ich mal) ist, weiß ich nicht. Aber wenn du das gleiche Ergebnis und einen moderneren CPU hast, liegt das wohl nicht daran.
Muß ich wohl doch die Koordinaten Fixen mit Fix(P(x) + 0.000000001)(oder so).

********************************
Wünsche allen ein schönes WE
********************************

Gruß Tomi

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

startrek
Moderator
Architekt


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

Beiträge: 1361
Registriert: 13.02.2003

.

erstellt am: 25. Jun. 2004 19: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 TomiProg 10 Unities + Antwort hilfreich

Abend Tomi,

an der CPU liegts wohl nicht,
hatte auf 'nem PII und 'nem AMD [äh'... XP2200 oder so ähnlich], dasselbe Ergebnis wie Du.

'Kurios' ist nun aber wüüüürklich übertrieben, ich mein je näher ich drüber nachdenk',
umso schizo..., nä logischer wird mir das Ganze und ich beginne zu begreifen.

Ich wünsch' auch erstmal noch nen schönen Ostermontag,

Gruss Helmut [aka Nancy]
---
A dozen, a gross, and a score,
Plus three times the square root of four,
        Divided by seven,
        Plus five times eleven,
Equals nine squared plus zero, no more.

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

BloodyMess
Mitglied
Applicationingenieur


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

Beiträge: 604
Registriert: 06.06.2002

AutoCAD Map 3D 2005
Win XP pro

erstellt am: 26. Jun. 2004 11:57    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 TomiProg 10 Unities + Antwort hilfreich

Hallo Tomi,

woher das Problem kommt kann ich Dir auch nicht sagen, aber wenn Du Dir die Dimensionen des Ergebnisses mal anschaust, wird´s klar.
Er bekommt ja schon in den Winkeln einen Fehler rein, hab Sie mal nach deg umgerechnet ...

Winkel 1 = 90,0000000000001
Winkel 2 = 270
Winkel 3 = 90,0000000000001

Nun bekommst Du, warum auch immer nur über den Winkel3, einen Wert, der von pc zu pc variieren wird. Meiner ist

PunktRückgabe X = -9,18454765366783E-14

Das heisst, das 14 Stellen nach dem Komma erst die Zahl kommt.

also 0.000000000000091845

Nun siehst es ja alleine, das Du diese Genauigkeit nie brauchen wirst, geschweige denn einhalten kannst und mit ACAD auch nie erreichen wirst.

Abhilfe schafft hier dieser Befehl

Debug.Print "PunktRückgabe X = " & Round(PunktRückgabe(0), 4)

Hier ist auf 10tel Millimeter gerundet, das dürfte es tun und dein Fehler ist weg.

Woher´s kommt - ich hab wirklich keine Ahnung, vielleicht kann´s ja jemand anderes erklären.

Gruss TP

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

mapcar
Mitglied
CADmin



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

Beiträge: 1250
Registriert: 20.05.2002

Die Phönizier haben das Geld erfunden - aber warum so wenig?
(Johann Nepomuk Nestroy)

erstellt am: 26. Jun. 2004 13:06    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 TomiProg 10 Unities + Antwort hilfreich

Ich kopiere hier einfach mal einen Text rein, der hier vielleicht weiterbringt. Neine, keine Urheberrechtsverletzung, der ist von mir selber;-)
Da es eine HTML-Seite war, geht hier aber Formatierung verloren. Durchstreichen geht hier wohl nicht, ich habe einen | dazwischengeflickt. Vielleicht habe ich jetzt andere Stellen übersehen...

Gruß, Axel

Code:

Der Umgang mit Kommazahlen

Zahlen mit Komma sind deutlich kompliziertere Gebilde als solche ohne. das wird schon durch die Tatsache belegt, dass jede moderne Rechner-CPU über eine eingebaute Extra-Einheit verfügt, die ausschliesslich für die Verarbeitung von Kommazahlen dient. Aber auch als Programmierer muss man sich über die Kommazahlen etwas mehr Gedanken machen als über die Ganzzahlen.

Zunächst ist da einmal die Tatsache, dass man Kommazahlen auf unterschiedliche Weise ein- und ausgeben kann, und der VBA-Editor erweist sich als ziemlich hartnäckiger Klug******er: Er hat einfach seine eigene Vorstellung, wie die Eingabe auszusehen hat. Versuchen Sie einfach mal, das folgende Beispiel in der VBA-Umgebung abzutippen - oder kopieren Sie es einfach in ein Modul:


Public Sub Test()
  Dim MySingle As Single

  MySingle = 1.5e3
  Debug.Print MySingle

  MySingle = 1.5e5
  Debug.Print MySingle

  MySingle = 1.5e6
  Debug.Print MySingle

  MySingle = 1.5e7
  Debug.Print MySingle

  MySingle = 1.5E14
  Debug.Print MySingle

  MySingle = 1.5E15
  Debug.Print MySingle

End Sub

VBA formatiert unsere Eingabe kurzerhand um. Die Ausgaben des Direktfensters sind im nächsten Code-Abschnitt als Kommentare eingefügt:


Public Sub Test()
  Dim MySingle As Single

  MySingle = 1500#
  Debug.Print MySingle          ' => 1500

  MySingle = 150000#
  Debug.Print MySingle          ' => 150000

  MySingle = 1500000#
  Debug.Print MySingle          ' => 1500000

  MySingle = 15000000#
  Debug.Print MySingle          ' => 1,5E+7

  MySingle = 150000000000000#
  Debug.Print MySingle          ' => 1,5E+14

  MySingle = 1.5E+15
  Debug.Print MySingle          ' => 1,5E+15

End Sub

Es gelten also bei der Ein- und Ausgabe unterschiedliche Grenzen: Eingegebene Zahlen bis zum Exponenten 14 werden als Dezimalzahl dargestellt, was darüber hinausgeht, wird in die Exponentialschreibweise umformatiert. Bei der Ausgabe liegt die Grenze aber offensichtlich beim Exponenten 6.

Was dieses Beispiel auch zeigt: Kommazahlen müssen im VBA-Editor mit einem Punkt(!) als Dezimaltrennzeichen eingegeben werden. Natürlich ist man das als AutoCAD-Anwender eigentlich gewöhnt, aber es macht doch etwas stutzig, da VBA sonst konsequent auf die Verwendung des Kommas als Trennzeichen achtet.

Verhält es sich bei Kommazahlen genauso wie dei den Ganzzahlen, was das Überschreiten des Wertebereichs angeht? Das testen wir mit einem Beispiel:


Public Sub Test()

  Debug.Print 1E+20! * 1E+20!

End Sub

Natürlich wird auch hier ein Überlauf angezeigt. 1E+20 * 1E+20 ergibt 1E+40, der Wertebereich eines Single hat seine Grenze aber bei 3,402823E+38.

Die schon hohen Grenzen des Single (und die noch wesentlich höheren des Double) sollten aber nicht zu der Annahme verleiten, dass die nun folgende, recht gewaltige Zahl so gespeichert werden kann, wie sie hier abgebildet ist:

12345678901234567890,123456789

Die Zahl ist zwar eindeutig kleiner als der Darstellungsbereich eines Single zulässt (etwa 1,2E+19, also noch lange nicht an der Grenze), trotzdem ist so so nicht zu verarbeiten. Schon bei der Eingabe im VBA-Editor wird sie beschnitten und sieht dann so aus (an den Punkt als Dezimaltrennzeichen bei der Eingabe denken!):

1.23456789012346E+19

Noch weiter beschnitten wird sie allerdings in der Ausgabe, und erst da zeigt sich, was wirklich gespeichert wird.


Public Sub Test()
  Dim s As Single

  s = 1.23456789012346E+19

  Debug.Print s              ' 1,234568E+19

End Sub

Der Datentyp Single arbeitet intern immer mit der Exponentialdarstellung. Die Mantisse einer Zahl hat bei einem Single immer 8 Stellen, das ist nicht VBA-spezifisch, sondern liegt in der Tatsache begründet, dass in 4 Bytes einfach keine größere Genauigkeit möglich ist.

Kommazahlen der Datentypen Single und Double sind also von der Tendenz her ungenau - damit muss man einfach leben. Wirklich genau sind nur 'glatte' Zahlen wie 1E+3 (1000). Spätestens dann, wenn irrationale Zahlen (z.B. π ins Spiel kommen, wird es aber ungenau. Mit dieser Ungenauigkeit kann man aber ganz gut leben, wenn man darüber Bescheid weiß.

Nun wird klarer, warum bei den Datentypen Single und Double von Realzahlen einfacher bzw. doppelter Genauigkeit die Rede ist. Der Double ist mit 8 Byte doppelt so groß wie der Single. Genau wie bei diesem ist ein Vierte des Speicherplatzes für den Exponenten und drei Viertel für die Mantisse. Das Komma wird explizit überhaupt nicht gespeichert, sondern liegt immer hinter der ersten Ziffer der Mantisse.

Wir verändern das letzte Beispiel noch einmal ganz minimal, um zu zeigen, dass das Zahlenliteral 1.23456789012346E+19 ein Double war, obwohl hier einem Single zugewiesen wurde:


Public Sub Test()
  Dim s As Single

  s = 12345678901234567890.123456789! ' Wird zu 1.234568E+19!

  Debug.Print s
  Debug.Print TypeName(s)

End Sub

Double-Zahlen können monströs groß sein, immerhin liegt die Grenze bei 1,79E+308. Eine sehr, sehr große Zahl, wenn man bedenkt, dass unser ganzer Globus aus lediglich ca. 1E+57 Atomen besteht. Wie ungenau jedoch auch Doubles sein können, lässt sich an unserer Beispielzahl nachvollziehen. Alle durchgestrichenen Ziffer lassen sich von Single bzw. Double nicht erfassen:

Single: 123456789|01234567890.123456789

Double: 1234567890123456|7890.123456789

Gespeichert werden also:

Single: 12345678000000000000.0

Double: 12345678901234560000.0


------------------

Meine AutoLisp-Seiten
Meine private Homepage
Mein Angriff auf dein Zwerchfell
Mein Lexikon der Fotografie
Mein gereimtes Gesülze

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

startrek
Moderator
Architekt


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

Beiträge: 1361
Registriert: 13.02.2003

.

erstellt am: 27. Jun. 2004 22:30    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 TomiProg 10 Unities + Antwort hilfreich

Abend Axel,

verrätste auch noch wo die htm im Originallink zu finden ist ?
Ansonsten weiss nicht wie derart Engagement deinerseits honorabel sein könnte ..., ausser macht Spass Dich zu lesen :-) U's unabhängig und eh' die Schwelle des U'sus bei weitem überschritten, wie gesagt bei Dir wünsch ich mir öfters so ein Ding mit 'ner 100 drauf,
aber vielleicht tuts auch schon ein nacktes Danke :-)

lg Nancy

[Diese Nachricht wurde von startrek am 27. Jun. 2004 editiert.]

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

mapcar
Mitglied
CADmin



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

Beiträge: 1250
Registriert: 20.05.2002

Die Phönizier haben das Geld erfunden - aber warum so wenig?
(Johann Nepomuk Nestroy)

erstellt am: 28. Jun. 2004 01:25    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 TomiProg 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von startrek:
verrätste auch noch wo die htm im Originallink zu finden ist ?

Leider nicht bei Amazon, und auch nicht im Netz, sondern nur auf meinem Rechner hier;-) Ich habe die Arbeit daran erstmal eingestellt, weil mir die Zukunft von VBA so ungewiss aussieht. Wenn es wirklich ein .NET-VBA oder so etwas geben wird, dann sieht doch alles ganz anders aus. Das habe ich ja schon mal in einem anderen Thread hier dargelegt.

Das mit den Us ist so 'ne Sache: Ein nettes 'Danke' gefällt mir eigentlich viel besser - deswegen vergebe ich auch selbst nie welche. Deine Anstrengungen kürzlich sind mir aber trotzdem nicht entgangen;-)

Gruß, Axel

------------------

Meine AutoLisp-Seiten
Meine private Homepage
Mein Angriff auf dein Zwerchfell
Mein Lexikon der Fotografie
Mein gereimtes Gesülze

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

daywa1k3r
Ehrenmitglied V.I.P. h.c.
Softwareentwickler



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

Beiträge: 3497
Registriert: 01.08.2002

erstellt am: 28. Jun. 2004 07:19    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 TomiProg 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von mapcar:
... Das mit den Us ist so 'ne Sache: Ein nettes 'Danke' gefällt mir eigentlich viel besser - deswegen vergebe ich auch selbst nie welche. ...


Dann mal, DANKE AXEL ! Sehr schön erklärt. Unities bekommst du aber nicht 

------------------
Grüße daywa1k3r

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

TomiProg
Mitglied
Technischer Zeichner


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

Beiträge: 51
Registriert: 29.04.2004

WinNT4.0(SP6) + AutoCAD 14.01, P3/400MHz(gääähn),256MB,Graphtec KD4620, ATI 3D Rage Pro(8MB)

erstellt am: 28. Jun. 2004 11:42    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 BloodyMess:
...Nun siehst es ja alleine, das Du diese Genauigkeit nie brauchen wirst, geschweige denn einhalten kannst und mit ACAD auch nie erreichen wirst.

Das ist wohl wahr. Ich arbeite in Millimeter und du hast vollkommen recht, daß ich soviele Kommastellen ja nicht brauche. Aber es ist immerhin ein Computer, der in der Lage sein sollte auf 14 oder 15 Nachkommastellen richtig zu rechnen. Wenn es ein Programmierfehler ist haben die Programmierer versagt 

Ich freue mich echt darüber, das ich nicht der einzige bin, der sich Gedanken darüber gemacht hatt. Ein dickes Danke an Axel für die eindrucksvolle Darstellung von Kommastellen in VBA.
Ich werde jedenfalls mein Problem damit lösen, das ich die Sache Runden werden, wie BloodyMess vorschlug.

Grüße
Tomi

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

VBProfi
Mitglied
Datenbankprogrammierer

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

Beiträge: 8
Registriert: 19.08.2004

erstellt am: 19. Aug. 2004 15: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 TomiProg 10 Unities + Antwort hilfreich

Mal eine "kleine" Vorstellung von der Größe von Zahlen:

Stell Dir vor, Du zählst im sekundentakt : 1, 2, 3, usw.

Bei einer Millionen (10^6)  bist du nach rund einem Monat
Bei einer Miliarde (10^9)  bist du nach rund 31 Jahren!!!
Bei einer Bilionen (10^12)  bist du nach rund ... Jahren!!!

Wenn man sich das ganze mal andersrum denkt, also einmilionstel
bzw. ein milliardstel, dann wird, glaube ich die theoretisierung
des Themas deutlich. Sollche "Ungenauigkeiten" sind schlicht nicht
praxisrelevant.
Gruß
Henning

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

mapcar
Mitglied
CADmin



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

Beiträge: 1250
Registriert: 20.05.2002

Die Phönizier haben das Geld erfunden - aber warum so wenig?
(Johann Nepomuk Nestroy)

erstellt am: 19. Aug. 2004 23:15    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 TomiProg 10 Unities + Antwort hilfreich

Genau der Irrtum, auf den alle reinfallen: Ein Double ist eben NICHT die Hyper-Mega-Super-Riesenzahl! Es ist nur eine Zahl mit etwa 15 Stellen hinterm Komma (Mantisse). Der Exponent verschiebt das Ganze nur in andere Größenbereiche.

Auf dem Rechner gilt nach wie vor 1.5E20 + 1 == 1.5E20, auch wenn das unsinnig aussieht. Du zählst also ziemlich bald nur noch in Zehnerschritten, dann in Hunderterschritten usw.

Es ist praxisrelevant, und zwar ganz gewaltig.

Gruß, Axel Strube-Zettler

------------------

Meine AutoLisp-Seiten
Meine private Homepage
Mein Angriff auf dein Zwerchfell
Mein Lexikon der Fotografie
Mein gereimtes Gesülze

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

VBProfi
Mitglied
Datenbankprogrammierer

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

Beiträge: 8
Registriert: 19.08.2004

erstellt am: 20. Aug. 2004 17:54    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 TomiProg 10 Unities + Antwort hilfreich

OK, bleiben wir mal bei Deiner Zahl:
1.5E20
und stellen uns vor, das wären mm.

1.5E20 mm =
1.5E17 m =
1.5E14 km

= 3.750.000.000 * der Erdumfang!!!

Wenn man also bei 3750000000 * dem Erdumfang einen mm
oder 1000 mm  oder 1000 m bei rechnet, so sind die Gedanken
über die Bedeutung eher theoretischer Natur.
(Außer Du berechnest astromische Daten)

Damit meine ich, dass man den Zusammenhang zwischen rechnerischer
Genauigkeit und praxisrelevanter genauigkeit nicht aus den
Augen verlieren sollte.


Meint der VBProfi dazu.

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