でcoutの変更変数になんだか?
-
09-06-2019 - |
質問
って機能するとどうなるのかわかりません
float function(){
float x = SomeValue;
return x / SomeOtherValue;
}
ある時点で、この機能であふれ返しまった大きなマイナスの値です。みやっこで起きていることについて、cout算書の機能に見えたこのように:
float function(){
float x = SomeValue;
cout << x;
return x / SomeOtherValue;
}
であります。もちろん、解決の問題を完全にダブル。いもの好奇心としての機能が作動してきまcoutedます。この例では、これらがあるときはバグかと思欠?
している場合のお役に立てるよう、この値に格納されたfloat型には整数値ではなく、特に大きなものでした。うかたまりをビニール袋に入れるfloatを避ける。)
解決
歓迎の素晴らしい世界への浮動小数点です。その答えできますが、浮動小数点のモデルのまとめのコードです。
この違いは、IEEE仕様のハードウェアのコードを実行します。自CPUが80ビット浮動小数点レジスタが取得し利用の32ビットのfloat値です。であることを確認するとともにかなりの精度が約定通りに履行される登録時よりも強いメモリアドレスなどのホーミングの登録).
き渡される値をcoutのコンパイラのための浮動小数点記憶し、この結果、失われた精密で興味深い行動WRTオーバーフロー。
にMSDN文書VC++ 浮動小数点のスイッチ.きみの作成と/fp:厳格なやかな印象を持ちます。
他のヒント
印刷値をcoutは変わらない価値の階層せます。
しかし、同様の行動をデバッグ諸表に変化が生じ値です。その場合、これはやて私からの追加算したことと、コンパイラのオプティマイザの行動に違いを異なるコード機能です。
追加の出力コンデンサcout算書のvaueのx使用します。なのでバージョンのオプティマイザを除去することが可能であることを可変での計算のための答えになります。
ちなみに、常に良いアイデアを宣言するのに不変な変数を使用 const
:
float function(){
const float x = SomeValue;
cout << x;
return x / SomeOtherValue;
}
その他のやらなければならないことを防ぎますから意図せずに通過ご変数への機能を変更したい非const
参照です。
cout原因への参照を保持する変数は、しばしばにコンパイラへの力でこぼしスタックです。
ですので、float、これの原因その価値を切り捨てられることから、ダブルまたは長いダブルの表現では通常ています。
呼び出し他の機能(non-inlinedがポインタを参照するxき起こさ動作と同じにし、その後のコンパイラがスマートや学習にインラインできるも螺:)
ろ、coutは、任意の変数の問題です。