2016-10-17 3 views
0

私はLeibniz公式の最初の26回の反復を使ってpiを計算するはずの小さなプログラムを作成しました。コードを実行すると、浮動小数点数の代わりに4が出力されました。何が起こっているのですか?どのように修正できますか?コードは次のとおりです。2つの浮動小数点数を割るC++の結果が

#include <iostream> 
#include <math.h> 
using namespace std; 

int main() 
{ 
    float a = 1/1; 
    float b = 1/3; 
    float c = 1/5; 
    float d = 1/7; 
    float e = 1/9; 
    float f = 1/11; 
    float g = 1/13; 
    float h = 1/15; 
    float i = 1/17; 
    float j = 1/19; 
    float k = 1/21; 
    float l = 1/23; 
    float m = 1/25; 
    float n = 1/27; 
    float o = 1/29; 
    float p = 1/31; 
    float q = 1/33; 
    float r = 1/35; 
    float s = 1/37; 
    float t = 1/39; 
    float u = 1/41; 
    float v = 1/43; 
    float w = 1/45; 
    float x = 1/47; 
    float y = 1/49; 
    float z = 1/51; 

    float a1 = a-b+c-d+e-f+g-h+i-j+k-l+m-n+o-p+q-r+s-t+u-v+w-x+y-z; 
    float b1 = a1*4; 

    cout << b1; 
} 

はい、これを行うにはもっと簡単な方法がありますが、これは概念の証明に過ぎません。

+3

をキャスト使用しています。これは2つのフロートを分割するのと同じではありません。 – krzaq

+0

すべての文でこれを試してください: 'float a =(float)1/3;'浮動小数点演算の1つをキャストするとfloatとして結果が得られます – PRP

+6

@PRP 'float a = 1.0f/3;' IMOをクリアします。 – Rakete1111

答えて

6

使用:

float b = 1/3; 

代入演算子のRHSが、他の全ての変数は1

の値を有する a除く0値を有する0になる整数除算を使用して評価されますそれを避けるために

float b = 1.0f/3; 

または

を使用
float b = 1.0/3; 

他のすべてのステートメントにも同様の変更を加えます。

0

もう一つの方法は、あなたがint型を分割し、フロートする(整数)の結果を代入している

float a = (float)1/1; // C-style cast 

または

float a = float(1)/1; 
関連する問題