c++ で int から float への変換が間違っているのはなぜですか? プログラムのある時点で、値が 10 または 14 の整数を float に明示的に変換すると、0 になります。なぜでしょうか? static_cast を試してみましたが、同じ結果が得られました。int と float の両方が 4 バイトであるため、int から float への変換はサイズによる降格または昇格ではないと考えていますか? 丸め誤差などに関連していますか?誰か説明してくれませんか。
これがコードです(ここには変更があり、正常に機能しますが、理由はまだわかりません)---
#include <iostream>
using namespace std;
int main()
{
int n;
int sum;
cout << "Please enter the number:";
cin >> n;
int *elements = new int[n];
cout << "Please enter the elements:";
for(int i=0; i<n; i++)
{
cin >> elements[i];
}
cout << endl;
///// this approach, gives the sum right, but float(sum) fails and always gives zero.
for(int i=0, sum=0; i < n; i++)
{
sum = sum + elements[i];
}
////// This works, when sum is initialised outside of for loop. float(sum) does the right conversion as well.
//sum = 0;
//for(int i=0; i < n; i++)
//{
// sum = sum + elements[i];
//}
cout << " float n is " << float(n) << " float sum is "<< float(sum) << endl;
// float(sum) is zero, when sum is initialised from within for loop.
delete[] elements;
return 0;
}
コンパイルするコマンド -> g++ 3.2.cpp -o 3.2
入力: n = 4; 要素 = 1 2 3 4
私が見落としているのは些細なことのように感じます。
助けてくれてありがとう。