C++ Programm/ Rundungsfehler bei Multiplikation und Division mit float
-
Hallo, mein erster Beitrag!
Ich habe ein Problem beim erstellen eines Programms in der Uni.
Und zwar sollen wir ein Programm erstellen wo mit float gerechnet wird.
Wo als erstes die floatZahl x = 10^6 in einer Schleife 10 mal mit k = 0.1693 multipliziert wird und dann 10 mal dividiert wird.Das habe ich dazu geschrieben:
#include <stdlib.h>
#include <iostream>
#include <cmath>
#include <iomanip>using namespace std;
// === FUNCTION ================================================== ====================
// Name: main
// Description: Aufgabe 2.2
// ================================================== ===================================
int m;
int d;
int p;
float k = 0.1693;
float x;
float MErgebnis = 0;
float Endergebnis = 0;int
main ( )
{
x = 10;
k = 0.1693;for ( p = 0; p <= 4; p++ ) // hier wird die Schleife 5 durchlaufen
{
x = x * 10; // hier wird 10 * 10 berechnet und dann dem x zugewiesen, danach wird 100 * 10 berechnet und wieder zugewiesen}
cout << "10^6 ist gleich: " << x << fixed << setprecision ( 8 );
for ( m=0; m < 10 ; m++ )
{
MErgebnis = x * k;
}cout << "\ndas Ergebnis der Multiplikation ist: " << MErgebnis;
for ( d=0; d< 10; d++ )
{
Endergebnis = MErgebnis / k;}
cout << "Das Endergebnis: " << Endergebnis;return EXIT_SUCCESS;
}// ---------- end of function main ----------
Hier gehen die Schleifen nicht so ganz.

-
Bartx schrieb:
int
main ( )
{
for ( p = 0; p <= 4; p++ ) // hier wird die Schleife 5 durchlaufen
{
x = x * 10; // hier wird 10 * 10 berechnet und dann dem x zugewiesen, danach wird 100 * 10 berechnet und wieder zugewiesen}
Was soll das werden?
for ( m=0; m < 10 ; m++ )
{
MErgebnis = x * k;
}Ich bin mir relativ sicher, dass mit "10 mal mit k multiplizieren" nicht gemeint war, 10mal dasselbe auszurechnen. Da war sicher gemeint, dass du 10^6 * k * k * k * ... *k (halt in einer Schleife) machen sollst.
for ( d=0; d< 10; d++ )
{
Endergebnis = MErgebnis / k;}
Hier dasselbe.
Hier gehen die Schleifen nicht so ganz.

Was soll das heißen? Ich wette die Schleifen gehen perfekt.
Noch zwei allgemeine Tipps: Vermeide globale Variablen. Und mache größere, schönere Kommentarbanner. Scherz.
-
Als erstes wollte ich 10^6 ausrechnen und dann wie du das sagtest.
-
Bartx schrieb:
Als erstes wollte ich 10^6 ausrechnen und dann wie du das sagtest.
Mein Prof meinte auch, dass ich voll die Kernscheiße geschrieben habe

-
Bartx schrieb:
Als erstes wollte ich 10^6 ausrechnen
Das seh ich auch, nur versteh ich nicht, wozu. Schreib doch einfach 1000000 hin. Oder kurz 1e6.
-
Das mit dem 1e6 hatte ich am Anfang, dann meinte er ich soll überprüfen ob es auch 10^6 ist, so habe dann eine Ausgabe cout eingebaut und dann wurde 1e6 angezeigt.
So ist ja eig das gleiche.
Dann schreib ich das wieder um.
und in den Schleifen, da sollte er doch 10 mal das berechnen was drin ist oder?
-
Wenn ich das mache unter der ersten Schleife, dann rechnet er es 2 mal aber immer noch nicht 10 mal.
MErgebnis = x * k;
MZErgebnis = MErgebnis * k;hmm...
-
Du weißt eigentlich, wie das geht. Schau dir nochmal deine Schleife an, die 10^6 ausrechnet. Du multiplizierst 10 5mal mit 10. Genauso solltest du später x 10mal mit k multiplizieren.
-
Hatte es vorher so:
for ( i = 0; i<10 ; i++)
{
P= x * x;
}und vorher der x die 10 zugewiesen.
Und da kam als Ergebnis irgendetwas mit 100100100100... i
-
Bartx schrieb:
Hatte es vorher so:
for ( i = 0; i<10 ; i++)
{
P= x * x;
}und vorher der x die 10 zugewiesen.
Und da kam als Ergebnis irgendetwas mit 100100100100... iUnd wo ich es nur 5 mal durchlaufen lies, hat er genau 1000000 berechnet..warum?
-
Ob du nun 10 mal
P = x * xausführst oder nur einmal, spielt keine Rolle.
Das ändert am Ergebnis von P nichts.Und ausgeschrieben soll
MErgebnis = x * k * k * k * k * k * k * k * k * k * k;Aber das berechnest du nicht.
-
DirkB schrieb:
Ob du nun 10 mal
P = x * xausführst oder nur einmal, spielt keine Rolle.
Das ändert am Ergebnis von P nichts.Und ausgeschrieben soll
MErgebnis = x * k * k * k * k * k * k * k * k * k * k;Aber das berechnest du nicht.
Also muss ich noch zu P = x * x;
z.B PP = P * x; ?
-
Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C (alle ISO-Standards) in das Forum C++ (alle ISO-Standards) verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Ach ja....der Schleifenkörper ist x=x*k;
