Почему генератор случайных чисел плохо работает?

делал генератор случайных чисел:

#include <iostream>
using namespace std;
float rnd = 0.0;
float start = 0.0;
float up_coeff = 475865.456735676829;
float rand(float dataa,float datab){
    return dataa/datab*datab-dataa;
};
int main(){
    for (start = 0.0;start < 5.0;start+=0.1){
        cout << rand(start,start*up_coeff) << "\n";
    };
    return 0;
};

А он мне выводит:

nan
0
0
0
0
0
0
0
0
5.96046e-08
0
0
0
0
0
0
1.19209e-07
1.19209e-07
1.19209e-07
-1.19209e-07
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
-2.38419e-07
-2.38419e-07
-2.38419e-07
-2.38419e-07
-2.38419e-07
-2.38419e-07
0
0
0
0
0
0
0
0
-4.76837e-07
-4.76837e-07

Изменил:

#include <iostream>
using namespace std;
float rnd = 0.0;
float start = 0.0;
float up_coeff = 475865.456735676829;
float rand(float dataa,float datab){
    return dataa/datab*datab-dataa;
};
int main(){
    for (start = 0.0;start < 5.0;start+=0.10034){
        cout << rand(start,start*up_coeff) << "\n";
    };
    return 0;
};

Теперь выводит:

nan
0
0
0
0
0
0
0
0
-5.96046e-08
0
0
0
1.19209e-07
0
1.19209e-07
0
1.19209e-07
-1.19209e-07
1.19209e-07
0
0
0
0
0
2.38419e-07
0
0
-2.38419e-07
0
0
-2.38419e-07
2.38419e-07
0
-2.38419e-07
2.38419e-07
0
-2.38419e-07
2.38419e-07
0
0
0
0
0
0
0
0
0
0
0

Ещё изменил:

#include <iostream>
using namespace std;
float rnd = 0.0;
float start = 0.0;
float up_coeff = 634475865.456735676829;
float rand(float dataa,float datab){
    return dataa/datab*datab-dataa;
};
int main(){
    for (start = 0.0;start < 5.0;start+=0.10034){
        cout << rand(start,start*up_coeff) << "\n";
    };
    return 0;
};

Теперь выводит:

nan
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0

А как исправить эти баги?


Ответы (1 шт):

Автор решения: George

Надо было так:

#include <iostream>
using namespace std;
float r;
float s;
float rnd = 0.0;
float start = 0.0;
float up_coeff = 475865.456735676829;
float rand(float dataa,float datab){
    return dataa/datab*datab-dataa;
};
int main(){
    for (start = 0.01;start < 5.0;start+=0.15634783){
        s = start;
        r = rand(s,s*up_coeff);
        while (r == 0){
            s += 0.000001;
            r = rand(s,s*up_coeff);
        }
        cout << r << "\n";
    };
    return 0;
};

А вот вывод:

-9.31323e-10
-1.49012e-08
-2.98023e-08
2.98023e-08
5.96046e-08
5.96046e-08
-5.96046e-08
1.19209e-07
1.19209e-07
1.19209e-07
-1.19209e-07
1.19209e-07
-1.19209e-07
2.38419e-07
2.38419e-07
2.38419e-07
-2.38419e-07
-2.38419e-07
-2.38419e-07
-2.38419e-07
-2.38419e-07
-2.38419e-07
2.38419e-07
2.38419e-07
2.38419e-07
2.38419e-07
4.76837e-07
4.76837e-07
4.76837e-07
-4.76837e-07
4.76837e-07
-4.76837e-07
→ Ссылка