3

float にキャストして浮動小数点演算で使用すると、 int と const int が異なる結果をもたらす理由を誰かが説明できますか? たとえば、次のコードを参照してください。

int _tmain(int argc, _TCHAR* argv[])
{
      int x = 1000;
      const int y = 1000;
      float fx = (float) x;
      float fy = (float) y;

      printf("(int = 1000) * 0.3f = %4.10f \n", 0.3f*x); 
      printf("(const int = 1000) * 0.3f = %4.10f \n", 0.3f*y);
      printf("(float)(int = 1000) * 0.3f = %4.10f \n", 0.3f*fx); 
      printf("(float)(const int = 1000) * 0.3f = %4.10f \n", 0.3f*fy);
      return 0;
}

結果は次のとおりです。

(int = 1000) * 0.3f = 300.0000119209
(const int = 1000) * 0.3f = 300.0000000000
(float)(int = 1000) * 0.3f = 300.0000119209
(float)(const int = 1000) * 0.3f = 300.0000119209

私の推測では、最初のケースでは 0.3f*(int) が暗黙的に float にキャストされ、2 番目のケースでは 0.3f*(const int) が暗黙的に double にキャストされます。これは正しいですか? もしそうなら、なぜこれが起こるのですか? また、「正しい」アプローチは何ですか?

どうもありがとう

4

1 に答える 1