質問: one(); assert(a==a); // 1.同じ変数同士の比較 assert(a==b); // 2.代入結果との比較 assert(a==c); // 3.同じ方法での生成結果同士の比較 return 0; } ``` これらが通ることは言語レベルやコンパイラレベルで保証されているのでしょうか。 サンプルはCで書いていますが、様々な言語でどうなっているのか知りたいです。特にC,C++,C#,Python,JavaScript,Rustに興味があります。
回答: 技術的な興味は理解できますが、実務で浮動小数点数の等値式を使う気にはなりません。できることなら避けるか、幅を持たせて比較します。 仮に、今の時点で「言語レベルやコンパイラレベルで保証されている」としても、将来にわたって保証されるかは疑問であると考えるからです。 他言語に移植することや他のコンパイルに変わることを考えると、その仕様をあてにするは危険だと思います。 整数ですら等値式を使うことがためらわれます。 ``` for(int i = 0; (i+1) == N; i++) ``` と書かかず、 ``` for(int i = 0; i < N; i++) ``` と書く理由は単に簡潔さだけではないと考えます。