def compute_step_size_A(x,print_flag,log10norm,log10abserr,log10relerr)
if log10abserr < (log10relerr + log10norm) then
log10abserr = log10relerr + log10norm
end
d1 = ap_max($norms[$max_taylor-$max_order],$small_float)
d2 = ap_max($norms[$max_taylor-1-$max_order],$small_float)
d3 = ap_max($norms[$max_taylor-2-$max_order],$small_float)
d4 = ap_max($norms[$max_taylor-3-$max_order],$small_float)
if DEBUG == 1
$stderr.puts "d1 == " + d1.to_s
$stderr.puts "d2 == " + d2.to_s
$stderr.puts "d3 == " + d3.to_s
$stderr.puts "d4 == " + d4.to_s
$stderr.puts "log10abserr == " + log10abserr.to_s
end
log10d1 = d1.about_log10
log10d2 = d2.about_log10
log10d3 = d3.about_log10
log10d4 = d4.about_log10
r = log10abserr
log10ro4 = (r - log10d4)/ap_int($max_taylor-4-$max_order)
log10ro3 = (r - log10d3)/ap_int($max_taylor-3-$max_order)
log10ro2 = (r - log10d2)/ap_int($max_taylor-2-$max_order)
log10ro1 = (r - log10d1)/ap_int($max_taylor-1-$max_order)
log10roa = ap_max(log10ro1,log10ro2)
log10rob = ap_max(log10ro3,log10ro4)
log10ro = ap_max(log10roa,log10rob)
if DEBUG == 1 then
$stderr.puts "r ==" + r.to_s
$stderr.puts "log10d1==" + log10d1.to_s
$stderr.puts "log10d2==" + log10d2.to_s
$stderr.puts "log10d3==" + log10d3.to_s
$stderr.puts "log10ro1==" + log10ro1.to_s
$stderr.puts "log10ro2==" + log10ro2.to_s
$stderr.puts "log10ro3==" + log10ro3.to_s
$stderr.puts "log10ro==" + log10ro.to_s
end
newmant = 10 ** ((log10ro.mant * (10 ** log10ro.expt)) - (($tot_order + 1) * $no_eqs) + 1)
sz = (Apfp.new(newmant,0,50,-NUM_DIGITS+newmant.to_s.size).norm * $h).norm
sz = fix_h(sz.clone)
if DEBUG == 1 then
$stderr.puts "sz(computed new $h) == " + sz.to_s
end
cs_info('After sz computed')
if $hmax < sz && $h != $hmin_init
$unchanged_h_cnt = 0
$reached_optimal_h = 1
$optimal_clock_start_sec = time_sec
$optimal_start = x[1]
if $hmax < sz then
sz= $hmax
end
end
if $h * $two < sz then
puts "$h suggested at " + ($h * $two).to_s
$stderr.puts "$h suggested at " + ($h * $two).to_s
puts "Requested accuracy was $log10abserr == " + $log10abserr.to_s
$stderr.puts "Requested accuracy was $log10abserr == " + $log10abserr.to_s
cs_info("$h suggested ")
return c0($two * $h)
end
return(sz)
end