2016-05-27 15 views
0

私はC++で次の式を評価しようとしています。 Visual Studio(現在のリリース)を使用しています。私はプログラムを実行するときこの式が正しく評価されないのはなぜですか?

#define _USE_MATH_DEFINES 
#include <math.h> 
#include <iostream> 

std::cout << (1.686 * 1000/(4/3)/M_PI/(pow(0.015, 3))/3340); 

は今、出力は次のようになります。 Wolfram's result

私も試してみた:私はWolframAlphaを使用する場合

47608.8

式がに評価されるのに対し式の各部分を分解して、 "pow()"関数が正しく動作しているかどうか、またはM_PIが正確であるがすべてがcであるように見えるかどうかをチェックする私はすべてを一度に評価するまで一貫しています。

私には何かがありません。私は間違った答えを得ていますか?

私はかなり長い間このコードを見てきましたが、何が起こっているのか分かりません。私はある種の精密誤差かもしれないと思っていますか?

+3

C++で '4/3'が' 1 'であるため – vu1p3n0x

+0

はい!ありがとう、私はばかげています。私はしばらくの間プログラムしていないし、私は4/3のような単純なものを正しいと仮定した。 –

+0

4と3は整数なので、整数除算が得られます。整数除算では、3で割った4の正解は* 1、残りは1です。 –

答えて

6
(4/3) 

このサブ式は2つの整数引数を持つため、整数計算で行われます。除算の結果は切り捨てられますので、1.333333fの代わりに結果は1です。

浮動小数点定数の一方または両方を浮動小数点定数にすることで修正できます。

関連する問題