Почему генератор случайных чисел плохо работает?
делал генератор случайных чисел:
#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