/*Napisac program liczacy kolejne wyrazy ciagu:
x{n+1}= x{n} + 3.0 * x{n}* (1 - x{n})
startujac z punktu x{0} = 0.01. Wykonac to zadanie dla roznych reprezentacji liczb (float, double). Dlaczego wyniki sie rozbiegaja?
*/
#include <iostream>
using namespace std;
void double_sequence(double x0,int q){
double tmp,tmp2;
int i;
cout<<"Double"<<endl;
for(i=0; i<q; ++i){
tmp = x0 + 3.0*x0*(1 - x0);
printf("%e\n",tmp);
x0 = tmp;
}
}
void float_sequence(float x0,int q){
float tmp,tmp2;
int i;
cout<<"Float"<<endl;
for(i=0; i<q; ++i){
tmp = x0 + 3.0*x0*(1 - x0);
printf("%d: f=%f, d=%f\n", tmp);
x0 = tmp;
}
}
int main(void){
float_sequence(0.01,20);
double_sequence(0.01,20);
return 0;
}
LypOYXBpc2FjIHByb2dyYW0gbGljemFjeSBrb2xlam5lIHd5cmF6eSBjaWFndTogCnh7bisxfT0geHtufSArIDMuMCAqIHh7bn0qICgxIC0geHtufSkgCnN0YXJ0dWphYyB6IHB1bmt0dSB4ezB9ID0gMC4wMS4gV3lrb25hYyB0byB6YWRhbmllIGRsYSByb3pueWNoIHJlcHJlemVudGFjamkgbGljemIgKGZsb2F0LCBkb3VibGUpLiBEbGFjemVnbyB3eW5pa2kgc2llIHJvemJpZWdhamE/CiovCgojaW5jbHVkZSA8aW9zdHJlYW0+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp2b2lkIGRvdWJsZV9zZXF1ZW5jZShkb3VibGUgeDAsaW50IHEpewoJZG91YmxlIHRtcCx0bXAyOwoJaW50IGk7Cgljb3V0PDwiRG91YmxlIjw8ZW5kbDsKCWZvcihpPTA7IGk8cTsgKytpKXsKCQl0bXAgPSB4MCArIDMuMCp4MCooMSAtIHgwKTsKCQlwcmludGYoIiVlXG4iLHRtcCk7CgkJeDAgPSB0bXA7Cgl9Cn0KIAp2b2lkIGZsb2F0X3NlcXVlbmNlKGZsb2F0IHgwLGludCBxKXsKCWZsb2F0IHRtcCx0bXAyOwoJaW50IGk7Cgljb3V0PDwiRmxvYXQiPDxlbmRsOwoJZm9yKGk9MDsgaTxxOyArK2kpewoJCXRtcCA9IHgwICsgMy4wKngwKigxIC0geDApOwoJCXByaW50ZigiJWQ6IGY9JWYsIGQ9JWZcbiIsIHRtcCk7CgkJCgkJeDAgPSB0bXA7Cgl9Cn0KIAppbnQgbWFpbih2b2lkKXsKCWZsb2F0X3NlcXVlbmNlKDAuMDEsMjApOwoJZG91YmxlX3NlcXVlbmNlKDAuMDEsMjApOwoJcmV0dXJuIDA7Cn0=
Float
0: f=0.039700, d=0.039700
0: f=0.154072, d=0.154072
0: f=0.545073, d=0.545073
0: f=1.288978, d=1.288978
0: f=0.171519, d=0.171519
0: f=0.597820, d=0.597820
0: f=1.319114, d=1.319114
0: f=0.056271, d=0.056271
0: f=0.215586, d=0.215586
0: f=0.722912, d=0.722912
0: f=1.323843, d=1.323843
0: f=0.037692, d=0.037692
0: f=0.146506, d=0.146506
0: f=0.521633, d=0.521633
0: f=1.270229, d=1.270229
0: f=0.240472, d=0.240472
0: f=0.788408, d=0.788408
0: f=1.288870, d=1.288870
0: f=0.171922, d=0.171922
0: f=0.599015, d=0.599015
Double
3.970000e-02
1.540717e-01
5.450726e-01
1.288978e+00
1.715191e-01
5.978201e-01
1.319114e+00
5.627158e-02
2.155868e-01
7.229143e-01
1.323842e+00
3.769530e-02
1.465184e-01
5.216706e-01
1.270262e+00
2.403522e-01
7.881012e-01
1.289094e+00
1.710848e-01
5.965293e-01