Sinus funktioniert auf Board nicht

23/09/2016 - 16:34 von Edzard Egberts | Report spam
Ich stehe gerade völlig auf dem Schlauch, weil ein Programm nicht
richtig rechnen will:

Ein 32bit-Slackware-13 ist zum einen auf dem PC als virtuelle Maschine
installiert und làuft zum anderen auf einem kleinen Linux-Board.

Folgender Source-Code:

//--
#include <iostream>
using std::cout;
using std::endl;

#include <cmath>

int main()
{
double Test= 3.19027;
cout << "sin(" << Test << ")= " << sin(Test) << endl;
return 0;
}
//--

Das ergibt auf dem PC -0.0486581 (korrekt) und auf dem Board -0.357033,
wenn ohne Optimierung compiliert wird. Wenn mit einfacher Optimierung
compiliert wird, kommt der richtige Wert heraus, allerdings nicht
zuverlàssig:

In einer größeren Berechnung ergibt sich der richtige Wert, wenn man den
Parameter direkt in den Sinus schreibt "sin(3.19027)" -> richtiger Wert
und der falsche Wert erscheint, wenn man die Zahl eine Zeile weiter als
double-Parameter übergibt "double Test= 3.19027; sin(Test);" -> falscher
Wert. Diese Berechnung ist zwar sehr umfangreich (Astronomie), ich denke
aber nicht, dass da etwas vermurkst ist, weil das auf dem PC làuft und
der Dreizeiler oben ohne Optimierung auch genau dieses falsche Ergebnis
bringt.

Beide Systeme sind auf dem gleichen Stand und auch wenn die Software
direkt auf dem Board compiliert wird, kommen falsche Ergebnisse. Wenn
ich das Binary vom PC, wo es richtig ausgeführt wird, auf das Board
verschiebe und da ausführe, kommt das falsche Ergebnis. Das muss also
irgendwie am Board liegen, aber was kann das sein und wie bekomme ich
das weg?
 

Lesen sie die antworten

#1 Edzard Egberts
23/09/2016 - 16:45 | Warnen spam
Edzard Egberts wrote:
Beide Systeme sind auf dem gleichen Stand und auch wenn die Software
direkt auf dem Board compiliert wird, kommen falsche Ergebnisse.



Nachtrag: Compiliert mit gcc 4.3.3 und g++ 4.3.3, also schon etwas àlter.

Ähnliche fragen