多すぎる値同士の割り算で誤差が発生した。doubleが混ざったのか?

Submit

https://atcoder.jp/contests/agc021/submissions/3928741

9.999999999999999 = 10?

  • 上記提出コードでWAになった状態を見てみると、
    • 9999,9999,9999,9999 を
    • 1000,0000,0000,0000 で割った値を整数で受け取った結果
  • 9を意図していたのに10が入っていたことが原因
  • powの結果がfloat, doubleだと、見出しのようなことが起こるのだろう
  • my_powを定義して累乗を計算する(入力・出力はll)としたら小数点が絡まないのでACした

学び

  • こういうこともある

コード

    ll c = N / pow(10, keta-1);
    pn(N);
    pn(pow(10, keta-1));
    pn(c);

結果

output:
N 9999999999999999
pow(10, keta-1) 1e+15
c 10 // !?!?