Sto scrivendo un metodo che crea una copia di un array di matrici di float. Stavo ottenendo alcuni valori estremamente strani dopo aver eseguito il debug di questo, quindi ho pensato di chiederlo perché non ero in grado di capirlo leggendo le FAQ sugli array di C++.Zero meno lo zero equivalente all'infinito?
Ecco le parti rilevanti del codice (è parte di un programma di grande, con la maggior parte delle cose irrilevanti per questo post):
// height and width are integer global variables
void method() {
float testArray[height][width];
for(int j = 0; j < height; ++j) {
for(int i = 0; i < width; ++i) {
testArray[j][i] -= 0.0;
std::cout << testArray[j][i] << std::endl;
}
}
}
(Nel mio test, altezza = 32 e width = 256, ma ciò non dovrebbe essere rilevante.) Quando inizializzo testArray, i suoi valori dovrebbero essere tutti 0.0, corretto? Quindi, nel ciclo, sottraggo 0.0 da un determinato elemento in testArray, che non dovrebbe logicamente modificare il valore. Ma la stampa dei valori di TestArray a seguito passo debug in alcuni valori strani, come ad esempio il seguente frammento:
[...]
0
[...]
-3.23805e-24
[...]
8.40779e-45
[...]
1.79513e+37
[...]
0
[...]
3.19586e+36
[...]
I valori più preoccupanti sono quelli infiniti, come ad esempio il quarto numero di cui sopra. Onestamente non so perché questo si sta verificando. Non dovrebbero tutti questi valori essere ancora circa 0.0? Ho pensato che avesse a che fare con l'imprecisione dell'aritmetica in virgola mobile, ma questo non dovrebbe portare ad un valore infinito ...
Quando si inizializza l'array, i valori non sono. inizializzato a 0, ti viene appena assegnata una sezione casuale di memoria con le dimensioni corrette – Sinkingpoint
Dovresti assicurarti di essere compilato al massimo livello di avviso, la maggior parte dei compilatori dovrebbe avvisarti che il tuo array non è inizializzato. –
Wow, quello era un soluzione rapida, grazie. Il mio compilatore ha fatto n o avvertimi del tutto. Non ho idea del motivo per cui ho pensato di inizializzare i valori su 0 ... – TakeS