#/*********************************************************** # Math::sqrt.rb -- 平方根 #***********************************************************/ def mysqrt(x) # 自家版 $\sqrtxend$ if (x > 0) if (x > 1); s = x; else; s = 1; end begin last = s; s = (x / s.to_f + s) / 2.0 end while (s < last) return last end if (x != 0); $stderr.printf("mysqrt: domain error\n"); end return 0 end def lsqrt(x) if (x == 0); return 0; end s = mysqrt(x) return (x / s.to_f + s) / 2.0 end DBL_DIG = 15 # LDBL_DIG = 18 for i in 0..20 printf("%2d %.*f %.*f\n",\ i, DBL_DIG - 1, mysqrt(i),\ LDBL_DIG - 1, lsqrt(i)) end exit 0