2016-06-27 1 views
0

プログラミングをしていない長い時間を経て、私は来月に割り当てられるC++を使いこなしています。私は、変数がオーバーフローする可能性があることに気付きました。具体的には、浮動小数点型の変数は、倍数型の小数点以下を保持しません。フロートGの精度が低かったのに対し、スタティックキャストはC++で数値の精度をどのように保つのですか?

#include <iostream> 
#include <iomanip> 


int main() 
{ 
    using namespace std; 

    cout << setprecision(20); 

    double t(0.1); 
    float g(0.1); 
    cout << t << endl; 
    cout << g << endl; 
    static_cast<float>(t); 
    cout << t << endl; 


} 

最初と最後(TダブルT及びフロート)の両方で、驚いたことにに、精度は同じであった。しかし、私はこのコードを試みました。これは私には直感的ではないようですが、static_castは数値の精度をどのように保持していますか?

ありがとうございました。あなたは何にもstatic_cast ED値を割り当てていなかったためだ

+5

キャストは、その場の操作ではありません。それらは変換された値を返します。彼らはオリジナルを直接変更しません。キャストの結果は決して保存しないので、何もしません。 –

+0

'float g(0.1f);'もっと正確になるだろう –

答えて

3

:今

#include <iostream> 
#include <iomanip> 

int main() { 
    using namespace std; 

    cout << setprecision(20); 

    double t(0.1); 
    float g(0.1); 
    cout << t << endl; 
    cout << g << endl; 
    g = static_cast<float>(t); // There was no assignment in your code 
    cout << g << endl; 
} 

が出力:

0.10000000000000000555 
0.10000000149011611938 
0.10000000149011611938 
+0

ああ、私はあまりにも間違いではないと思った。関係なく、ありがとう。 – DeltaAccel

+1

@DeltaAccel私たちの間で誰かが私たちの生活の中でどっかの間違いをしなかったのですか? (; – Jezor

3

あなたは、tの値を変更しませんでした。以下、この使用

cout << static_cast<float>(t) << endl; 

又は

t = static_cast<float>(t); 
    cout << t << endl; 
関連する問題