Announcement

Collapse
No announcement yet.

Unterschiedliches Rechenergebnis unter 32 Bit und 64 Bit OS??

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Unterschiedliches Rechenergebnis unter 32 Bit und 64 Bit OS??

    Guten Abend zusammen,

    ich habe folgendes Problem mit einer eigentlich einfachen Berechnung. Es geht dabei um die Entfernungsberechnung von Koordinaten. Unter Windows XP 32 Bit wird die korrekte Entfernung ausgerechnet, läuft das Programm unter Windows 7 64 Bit, so wird im Ergebnis das Komma um 3 Stellen nach rechts verschoben, statt 41,4294 Kilometern kommt dann 41429,4 km raus, was natürlich Blödsinn ist. Weiß irgend jemand die Ursache dieses Kommawanderns unter 64 Bit Systemen? Leider habe ich weder ein Win 7 32 Bit noch ein Win XP 64 Bit zur Verfügung um zu testen, obs am Betriebssystem selbst oder an der 32 bzw 64 Bit Version liegt. Hier noch der Code zur eigentlichen Berechnung:

    [highlight=vbnet]

    Dim LatRAD1 As String
    Dim LonRAD1 As String
    Dim LatRAD2 As String
    Dim LonRAD2 As String
    Dim distance As Decimal
    Dim LatRAD1a As String
    Dim LonRAD1a As String
    Dim LatRAD2a As String
    Dim LonRAD2a As String
    Dim LatRAD1b As String
    Dim LonRAD1b As String
    Dim LatRAD2b As String
    Dim LonRAD2b As String
    Dim z As String
    Dim x As Double = "6378.137"
    LatRAD1a = txtLAT1.Text.Replace(",", ".")
    LatRAD2a = txtLAT2.Text.Replace(",", ".")
    LonRAD1a = txtLON1.Text.Replace(",", ".")
    LonRAD2a = txtLON2.Text.Replace(",", ".")

    LatRAD1b = Double.Parse(LatRAD1a, CultureInfo.InvariantCulture)
    LonRAD1b = Double.Parse(LonRAD1a, CultureInfo.InvariantCulture)
    LatRAD2b = Double.Parse(LatRAD2a, CultureInfo.InvariantCulture)
    LonRAD2b = Double.Parse(LonRAD2a, CultureInfo.InvariantCulture)
    LatRAD1 = ((LatRAD1b / 180) * Math.PI)
    LonRAD1 = ((LonRAD1b / 180) * Math.PI)
    LatRAD2 = ((LatRAD2b / 180) * Math.PI)
    LonRAD2 = ((LonRAD2b / 180) * Math.PI)
    z = Double.Parse(x, CultureInfo.InvariantCulture)

    distance = Math.Acos(Math.Sin(LatRAD1) * Math.Sin(LatRAD2) + Math.Cos(LatRAD1) * Math.Cos(LatRAD2) * Math.Cos(LonRAD1 - LonRAD2)) * z
    tbDistance.Text = distance.ToString


    [/highlight]

    Viele Grüße und angenehmen Restabend

  • #2
    Du würdest dich leichter tun jemanden zu finden der dir hilft wenn du ein kompilierbares Beispiel postest das das Problem zeigt bzw. zeigen sollte.

    Comment


    • #3
      Evtl. wäre auch ein kleiner Test ganz hilfreich, damit derjenig auch das Testszenario sieht

      Comment


      • #4
        Hallo,

        hast du daran gedacht, dass die Wurzel für den Fehler womöglich in den double.Parsungen liegt? Also wie im OS das Dezimaltrennzeichen deklariert ist.

        Dass die System unterschiedlich rechnen ist mit an Sicherheit grenzender Wahrscheinlichkeit auszuschließen.

        mfG Gü
        "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

        Comment


        • #5
          Originally posted by gfoidl View Post
          hast du daran gedacht, dass die Wurzel für den Fehler womöglich in den double.Parsungen liegt? Also wie im OS das Dezimaltrennzeichen deklariert ist.
          Wird daran liegen. Und Win7 hat auch den Bug das auf Deutschen Systemen die Deutschen Einstellungen angezeigt werden aber OS-Intern US-Einstellungen verwendet.

          Comment


          • #6
            Wer mit strings rechnet hat eigentlich auch nichts anderes verdient

            Comment

            Working...
            X