Zum Inhalt springen

Fehlerhafte double Berechnung


Fufialk

Empfohlene Beiträge

Es ist mal wieder aussenstehender Rat gefragt, der mich auf den richtigen Weg weißt.

Ich lese verschiedene Werte aus einer Datei ein, führe eine Berechnung durch, und speicher die Werte ab.

Jetzt soll eine Kontrollfunktion hinzukommen, da ein Wert auf monotonen Anstieg überprüft werden soll. Ich weiß, an welcher Stelle dieser Wert steht. Ich lese nun den ersten Wert ein, führe die Berechnung durch, lese den zweiten Wert ein, führe die selbe Berechnung durch, und Vergleiche. Im nächsten Schritt, wird Wert 2 mit dem nächsten verglichen. Das ganze läuft über eine Schleife:


int u = 74;
int z = 0;
for (i = 0; i < Max; i++)
{
int t = z+2;
ifl.seekg(t*sizeof(short), ios::beg);
ifl.read((char*)&timechecka, sizeof(int));
ifl.seekg(u*sizeof(short), ios::beg);
ifl.read((char*)&timecheckb, sizeof(int));
timechecka = (timechecka + 3600)/86400 + 25569;
timecheckb = (timecheckb + 3600)/86400 + 25569;
timecheckc = (zeit + 3600)/86400 + 25569;
bool timecheck = (timechecka <= timecheckb && timecheckb <= timecheckc);
switch (timecheck)
{
case true: /*Verarbeitung*/ z = z + 72; u = u+72; break;
case false: u = u + 72; break
}
}
[/PHP]

Beim ersten Durchlauf der Schleife passiert folgendes:

t = 2 => [b]timechecka[/b] zuweisen

u = 74 => [b]timecheckb[/b] zuweisen

double Berechnung, [color=Red]hier tritt jetzt der Fehler auf[/color]

[b]timecheckb[/b] wird falsch berechnet:

timechecka = 25569

timecheckb = 8.57189 e+ 262

timecheckc = 38621

Zweiter Durchlauf:

t = 74=> [b]timechecka[/b] zuweisen

u = 146 => [b]timecheckb[/b] zuweisen

double Berechnung:

timechecka = 2.56 e+04

timecheckb = 9.92 e+257

hier wird der selbe Wert richtig bestimmt (auf die Zähler (u & t) achten) denn [b]timechecka[/b] ist hier der selbe Wert, wie [b]timecheckb[/b] im ersten Schleifendurchlauf.

Habe ich jetzt alle verwirrt? Wer sieht meinen Schreib/Denkfehler?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Sind in der Datei int- oder double-Wert gespeichert? Wenn es int-Werte sind, musst du in int-Variablen einlesen und den Wert einer double-Variablen zuweisen. Wenn es double-Werte sind, musst du mit sizeof(double) einlesen.

Du kannst nicht einfach int-Werte in double-Variablen einlesen, weil die binäre Repräsentation (und mit hoher Wahrscheinlichkeit auch die Größe) unterschiedlich ist.

Nachtrag: Deine Umrechnung kannst du auch weglassen. Das ist eine lineare Funktion mit positivem linearen Koeffizienzen. Da du dieselbe Funktion auf alle drei Werte anwendest, ändert sich an deiner Bedingung nichts, wenn du sie weglässt.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...