float の配列の配列のコピーを作成するメソッドを作成しています。これをデバッグした後、いくつかの非常に奇妙な値を取得していたので、C++ 配列の FAQ を読んでもこれを理解できなかったので、これについて質問しようと思いました。
コードの関連部分は次のとおりです (これは巨大なプログラムの一部であり、ほとんどの部分はこの投稿には関係ありません)。
// 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;
}
}
}
(私のテストでは、高さ = 32、幅 = 256 ですが、それは関係ありません。) testArray を初期化すると、値はすべて 0.0 になるはずですよね? 次に、ループ内で、testArray の特定の要素から 0.0 を減算しますが、これは論理的に値をまったく変更しないはずです。ただし、testArray の値をデバッグ ステップとして出力すると、次のスニペットのように、いくつかの奇妙な値が生成されます。
[...]
0
[...]
-3.23805e-24
[...]
8.40779e-45
[...]
1.79513e+37
[...]
0
[...]
3.19586e+36
[...]
最も気になる値は、上記の 4 番目の数値などの無限の値です。正直なところ、なぜこれが起こっているのかわかりません。これらの値はすべてまだ約 0.0 であるべきではありませんか? 浮動小数点演算の不正確さに関係していると思っていましたが、それは無限値になるはずがありません....