Hi again, Since nobody answers I have created following function for comparing real numbers from field CF(5). It works for numbers tau, tau+1/10^4000. It does not for tau, tau + 1/10^5000 (tau is defined below).
Regards, Marek # Function for comparing real numbers from CF(5) field # The idea is to use fibonacci sequence approximating irrational number tau= (Sqrt(5)-1)/2 = 0,61803398874989484820458683436564 # Define basis [1,tau] of the Field(tau). Any number x0 from this field can be presented as a*1+b*tau # for rational numbers a,b. Using approximation f(n)/f(n+1) for tau we obtain approximation # x(n)=a+b*f(n)/f(n+1) for x0. # Case 1: compare irrational number x0 with rational number p0. # In this case we look for n such that both x(n) and x(n+1) are greater than p0 or both smaller than p0. # Since all the time irrational x is between x(n) and x(n+1) we know that x is smaller or greater than p0. # Case 2: compare irrational numbers x0 with y0. # Look for n such that we have both [x(n), x(n+1)] are smaller or bigger than both [y(n), y(n+1)]; # function returns tau:=(Sqrt(5)-1)/2; F:=Field(tau); bas:=Basis(F, [1,tau]); # At first try do not look at efficiency; just obtain good result; returns true when x<y comp_real5:=function(x,y) local cc,a,b,c,d,n, maxn, nstep; maxn:=10000; nstep:=100; if not ([x,y] in F^2) then Print ("Numbers outside the tau field, cannot compare\n"); return fail; fi; if x=y then return false; elif IsRat(x) and IsRat(y) then return x<y; # both rationals elif IsRat(y) then cc:=Coefficients(bas, x); a:=cc[1]; b:=cc[2]; n:=First(nstep*[1..maxn/nstep], n->((a+b*Fibonacci(n)/Fibonacci(n+1)<y) and (a+b*Fibonacci(n+1)/Fibonacci(n+2)<y)) or ((a+b*Fibonacci(n)/Fibonacci(n+1)>y) and (a+b*Fibonacci(n+1)/Fibonacci(n+2)>y)) ); if n= fail then Print("Cannot compare using maxn approximation\n"); return fail; fi; return (a+b*Fibonacci(n)/Fibonacci(n+1)<y) and (a+b*Fibonacci(n+1)/Fibonacci(n+2)<y); elif IsRat(x) then cc:=Coefficients(bas, y); a:=cc[1]; b:=cc[2]; n:=First(nstep*[1..maxn/nstep], n->((a+b*Fibonacci(n)/Fibonacci(n+1)>x) and (a+b*Fibonacci(n+1)/Fibonacci(n+2)>x)) or ((a+b*Fibonacci(n)/Fibonacci(n+1)<x) and (a+b*Fibonacci(n+1)/Fibonacci(n+2)<x)) ); if n= fail then Print("Cannot compare using maxn approximation\n"); return fail; fi; return (a+b*Fibonacci(n)/Fibonacci(n+1)>x) and (a+b*Fibonacci(n+1)/Fibonacci(n+2)>x); else # both irrational cc:=Coefficients(bas, x); a:=cc[1]; b:=cc[2]; cc:=Coefficients(bas, y); c:=cc[1]; d:=cc[2]; n:=First(nstep*[1..maxn/nstep], n->((a+b*Fibonacci(n)/Fibonacci(n+1)<c+d*Fibonacci(n)/Fibonacci(n+1)) and (a+b*Fibonacci(n)/Fibonacci(n+1)<c+d*Fibonacci(n+1)/Fibonacci(n+2)) and (a+b*Fibonacci(n+1)/Fibonacci(n+2)<c+d*Fibonacci(n)/Fibonacci(n+1)) and (a+b*Fibonacci(n+1)/Fibonacci(n+2)<c+d*Fibonacci(n+1)/Fibonacci(n+2))) or ((a+b*Fibonacci(n)/Fibonacci(n+1)>c+d*Fibonacci(n)/Fibonacci(n+1)) and (a+b*Fibonacci(n)/Fibonacci(n+1)>c+d*Fibonacci(n+1)/Fibonacci(n+2)) and (a+b*Fibonacci(n+1)/Fibonacci(n+2)>c+d*Fibonacci(n)/Fibonacci(n+1)) and (a+b*Fibonacci(n+1)/Fibonacci(n+2)>c+d*Fibonacci(n+1)/Fibonacci(n+2))) );\ if n= fail then Print("Cannot compare using maxn approximation\n"); return fail; fi; return ((a+b*Fibonacci(n)/Fibonacci(n+1)<c+d*Fibonacci(n)/Fibonacci(n+1)) and (a+b*Fibonacci(n)/Fibonacci(n+1)<c+d*Fibonacci(n+1)/Fibonacci(n+2)) and (a+b*Fibonacci(n+1)/Fibonacci(n+2)<c+d*Fibonacci(n)/Fibonacci(n+1)) and (a+b*Fibonacci(n+1)/Fibonacci(n+2)<c+d*Fibonacci(n+1)/Fibonacci(n+2))); fi; end; On 9/19/12, Marek Mitros <ma...@mitros.org> wrote: > Hi, > > I wonder how I could compare real numbers in GAP i.e. cyclotomics > which are real. I try Float but it doesn't work for cyclotomics - any > advice ? Say my numbers are limited to CF(5) field. Here is example: > sigma:=(E(5)+E(5)^4)/2; # = RealPart(E(5)) = (Sqrt(5)-1)/4 = 0.309... > is real number. How I can compare whether it is bigger or smaller > that 1/2 ? It is known that this number is equal to Another real > number in CF(5) is > tau:=-RealPart(E(5)^2); # =-(E(5)^2+E(5)^3)/2=(Sqrt(5)+1)/4 = > 0.809...=sigma+1/2 > > How could I develop function comparing elements of the field generated > by sigma and tau ? I mean comparison as real numbers. I can obtain > coefficients for given number x: > Coefficients(Basis(Field(sigma)), x) > Using this can I find the position of the number on real axis ? I.e. > compare with another field element or rational number ? > > I would really be nice to have possibility of comparing real subset of > cyclotomics are real numbers in GAP. > > Regards, > Marek > _______________________________________________ Forum mailing list Forum@mail.gap-system.org http://mail.gap-system.org/mailman/listinfo/forum