!今日参加したコンテストで有効な電話番号の組み合わせ数を求める問題が出題されました。longの大きな値、例えば\(10^{17}\)から小さな値、例えば10や1を引く演算を行う必要がありました。powを使って10の冪乗を計算する解法も少なくなかったのですが、おそらくそのほとんどはテスト時に落ちてしまいました。計算誤差が原因のようです。これは自分にとっても大きな驚きでした。x)がきっちりと10の冪乗を返すことを知っていたからです。i)は問題なしどこで計算誤差が出ているかを考えるために以下のような実装を用意しました。10^2)\)を計算する実装です。期待している答えは末尾が...,999,889となるはずです。ここでアサーションエラー!変数cの内容をチェックしました。期待とは異なり、99,999,999,999,999,888でした。以下は期待通り...,999,889を返します。ここも問題なし!どうも自分はこれまで、-=演算子は左側の変数の型で演算される、と思い込んでいたようです。longにキャストされると考えていました。longにキャストされるようです。これまで挙動を正確に把握していなかったこともあり、pow関数を使って10の冪乗を計算しないようにしていましたが、次のようなイディオムとして今後積極的に使っていきたいな、と考えています。この知見を大好きなハックにも役立てたいです。x));最後になりますが、TLで気さくに質問に答えてくださった@n_vipさん、ありがとうございました。追記これは実装依存の挙動だそうです。y)のyが整数のときはpowを使うべきではないとのこと。naoya_tさんにご指摘いただきました。ありがとうございます)。Layout(3)算術式を記述するにはいくつかの方法があります。