I want to compute the regulator of a real quadratic field Q(sqrt d) to high precision, accurately enough to compute the fundamental unit. The default breaks at d = 331 where fundamental unit needs more than 53 bits (the precision of doubles). The documentation says that Pari computes to a higher precision than SageMath. Also somewhere it says that if you get a good enough approximation to the regulator, it's trivial to refine it to high accuracy. It refers to "the tutorial" without a link; I read the Pari-GP tutorials on algebraic number theory without finding any explanation of that remark. So actually there are two questions here: point me to an explanation of refining the computation of the regulator, and secondly, fix the following code so that it doesn't print "oops" when d = 331.
gp.set_real_precision(256) # doesn't seem to do anything def check_unit(N): for d in range(10,N): if not is_squarefree(d): continue K.<a> = QuadraticField(d) G = K.unit_group() [x,y] = G.gen(1).value() x = abs(x) R = K.regulator(None) twox = round(exp(R)) x2 = twox/2 y2 = round(twox/sqrt(d))/2 print(d,x,x2,y,y2,exp(R)/2) if x != x2 or y != y2: print("oops!") return if norm_is_negative(x,d): print("norm is negative") -- You received this message because you are subscribed to the Google Groups "sage-support" group. To unsubscribe from this group and stop receiving emails from it, send an email to sage-support+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/sage-support/1775cda8-6650-4073-92ea-a5918f896631n%40googlegroups.com.