Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Fehlerhafte double Berechnung

Empfohlene Antworten

Veröffentlicht

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?

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.

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.