あなたの特定の例では、はい、バイナリ表現はコンパイル時にエンコードされます。おそらくCライブラリ(atod、sscanf、etc)を呼び出し、そのライブラリが切り捨てや丸めで行うことは何でも起こります。また、コンパイラの「機能」または「ルール」は、同じことを行うときに発生する実行時ルールと必ずしも同じではありません。とにかく浮動小数点との同等性をチェックするべきではありませんが、コンパイル時の値を取得してからプログラムに文字列を供給し、そのランタイムを変換する場合 (コマンドラインで値 4.5632 を渡し、ライブラリ呼び出しの 1 つを使用するとします)必ずしも同じ浮動小数点値が得られるとは限りません。私は、コンパイラ (gcc など) がコンパイル時定数で本当に悪い仕事をするのを見てきました。
double d; int a;
a 45632;
d = a;
d/=10000;
また、最適化したとしても、より適切で正確な回答が得られる傾向があります。
int から double への変換でハードウェア + OS エラーが発生するリスクがあります。Hauser は、int から float および float から int の操作で発生する傾向がある FPU エラーについてコメントしました。コンパイル時に、コンパイラーが文字列を浮動小数点数に直接変換するのではなく、文字通り 2 つの int を浮動小数点数に変換すると仮定したとしても。
このすべてをデモンストレーションしてから数年が経ちましたが、コンパイラが改善されたのかもしれません (疑わしい)。ハードウェアが改善されたことを願っています (おそらく、以前は、バグを簡単に見つけられずに fpu を見つけることは非常にまれでした)。