C++ Maschinengenauigkeit und Summen |
Marcell99
Eroberer
Dabei seit: 14.11.2015
Beiträge: 53
|
|
|
14.11.2015 14:24 |
|
|
|
Aufgabe1:
Definiere ein Epsilon > 0 (z.B. 0.01). Solange (1+Epsilon > 1) kannst du das Epsilon verringern (halbieren). Damit kriegst du schon einen ganz brauchbaren Wert.
code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
|
#include <stdio.h>
int main() {
double epsilon = 0.01;
double epsilonValid;
while (1 + epsilon > 1)
{
epsilonValid = epsilon;
epsilon /= 2;
}
printf("%g\n", epsilonValid);
} |
|
Aufgabe 2:
.
Was brauchst du beim Programmieren, um die Summenformel umzusetzen, wo ja mehrfach addiert wird?
__________________ Syntax Highlighting fürs Board (Link)
|
|
14.11.2015 15:36 |
|
|
Marcell99
Eroberer
Dabei seit: 14.11.2015
Beiträge: 53
|
|
int main(int argc, const char * argv[]) {
float a=4.0;
while (true) {
if (1.0+a>1.0) {
break;
}
a *=4;
}
cout<<"ergebnis"<<a<<endl;
double eps =0.5;
while (true) {
if (1.0 + eps> 1.0) {
break;
}
eps *=0.5;
}
cout<<"ergebnis "<<eps<<endl;
long double b=7.844;
while (true) {
if (1.0+b>1.0) {
break;
}
}
cout<<"ergebnis "<<b<<endl;
also ist dann meine Lösung falsch ;/
Aufgabe 2 )
so muss ich das eingeben
wenn das dir weiterhilft
#include <iostream>
using namespace std;
int main()
{
double sum; // Summe
int i,n;
cout <<"n eingeben"<<endl;
cin >> n;
sum=0.;
for (i=1;i<=n;i=i+1)
{
sum=sum+i-1./3.;
}
cout <<"Summe ist "<<sum<<endl;
}
|
|
14.11.2015 15:40 |
|
|
|
Zur 1: die anderen sind genauso verkehrt, ich dachte es reicht, das am float zu erklären.
Zur 2:
sum=sum+k+1./k*k;
Das rote k steht so nicht in der Formel, das muss raus.
Mit der Formel berechnest du übrigens
__________________ Syntax Highlighting fürs Board (Link)
|
|
14.11.2015 16:06 |
|
|
Marcell99
Eroberer
Dabei seit: 14.11.2015
Beiträge: 53
|
|
#include <stdio.h>
int main(int argc, const char * argv[]) {
float Zahla=1.0f;
float Zahlb;
while ((1+Zahla) >1) {
Zahla=Zahlb;
Zahlb /=2;
}
printf("%f\n",Zahla);
double epsilon = 0.01;
double epsilonValid;
while ((1 + epsilon) > 1)
{
epsilonValid = epsilon;
epsilon /= 2;
}
printf("%g\n", epsilon);
long double c=0.0234l;
long double d;
while ((1+c)>1) {
d=c;
c/=2;
}
printf("%l\n",c);
return 0;
}
kann ich das so lassen ??? sag bitte ja :/
|
|
14.11.2015 16:47 |
|
|
Marcell99
Eroberer
Dabei seit: 14.11.2015
Beiträge: 53
|
|
was meinst du jetzt damit ??
|
|
14.11.2015 16:57 |
|
|
|
Du teilst Zahlb durch 2, obwohl diese anfangs die temporäre Variable ist. Gleiches gilt für die Zuweisung, bei der du die Reihenfolge vertauscht hast.
__________________ Syntax Highlighting fürs Board (Link)
|
|
14.11.2015 16:59 |
|
|
|
Bei long double passt alles.
Jetzt fehlt dir ein '}', die Variable heißt Zahlta statt Zahla und du setzt sie auf 1, statt sie zu halbieren.
__________________ Syntax Highlighting fürs Board (Link)
|
|
14.11.2015 18:39 |
|
|
Marcell99
Eroberer
Dabei seit: 14.11.2015
Beiträge: 53
|
|
ich hab die ja bei Zahl a auf 1 gesetzt
|
|
14.11.2015 18:43 |
|
|
|