long doubleのsqrtはdouble版より10倍遅い

実行時間
long double 122ms
float 12ms
double 8ms
int main(){
    cin.tie(0);
    ios::sync_with_stdio(false);

    // input
    ll D;cin>>D;

    ld d = sqrtl(D);

    ll mi=inf;
    rep(x,1e7){
      if(x>=d)break;

      ld y = sqrtl(D-x*x);

      ll y0 = floorl(y);
      ll y1 = ceill(y);

      ll v0 = abs(x*x + y0*y0 - D);
      chmin(mi,v0);
      
      ll v1 = abs(x*x + y1*y1 - D);
      chmin(mi,v1);
   }
    p(mi);
    
    return 0;
}
  • 122msはlong doubleのsqrtを106回程度回した時の時間なので、1回当たりは十分に速い
  • とはいえ、AHCの焼きなましで可能な限り回したい(高速化したい)などの時は、doubleに落とすのは全然ありだろう