I have to do a program that generates random numbers for x1 and x2 and perform the operation F = x1 * x1 + x2 * x2; but I'll repeat this 10 times and I'll save the smallest value of F; then I'll repeat 100 times and save the smallest value of F; and so on; The idea is that the program should tend to show declining values because of statistics However, my program is a bit noisy, it is not showing smaller and smaller values, in reality it is showing a lot of repeated value Where am I going wrong?
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void FuncaoMenorValor(int z, int N, float* menoresF){ // z repersenta o tanto de vezes que a iteração do for vai rodar, N representa a posição do vetor menoresF que vai guardar o menor valor encontrado de F na iteração, e menoresF é o vetor que guarda os menores valores encontrados de F, de forma geral
float x1, x2, F = 0, menorF = 10;
int a, b, k, i;
for(i = 0; i < z; i++){
a = 1 + rand()%10; // dessa linha até a linha 24, é um algoritmo para gerar um numero no intervalo [-1,1]
b = 1 + rand()%10;
k = rand()%1;
if(k == 0){
x1 = (float) a/100;
}
if(k == 1){
x1 = (float) -1*a/100;
}
k = rand()%1;
if(k == 0){
x2 = (float) b/100;
}
if(k == 1){
x2 = (float) -1*b/100;
}
F = x1*x1+x2*x2;
if(F < menorF){
menorF = F;
}
if(i == (z-1)){ // quando o programa chega na ultima iteração, ele deve guardar o valor do menorF encontrado
menoresF[N] = menorF;
}
}
}
int main(){
srand(time((NULL))); // seeda o rand
float menoresF[11];
int j;
FuncaoMenorValor(10, 0, menoresF);
FuncaoMenorValor(20, 1, menoresF);
FuncaoMenorValor(100, 2, menoresF);
FuncaoMenorValor(200, 3, menoresF);
FuncaoMenorValor(500, 4, menoresF);
FuncaoMenorValor(1000, 5, menoresF);
FuncaoMenorValor(2000, 6, menoresF);
FuncaoMenorValor(10000, 7, menoresF);
FuncaoMenorValor(20000, 8, menoresF);
FuncaoMenorValor(50000, 9, menoresF);
FuncaoMenorValor(100000, 10, menoresF);
for(j = 0; j < 11; j++){ // printa todos os valores do vetor menoresF
printf("\n%f", menoresF[j]);
}
return 0;
}