> geo:= proc(u,b) you may easily check that geo(u-1,u)=geo(u,u) for all u ...!
local R;

R:=2^((u-b)/2);

return(evalf(1/(1+2^(-b-1))/R^2*product(1+R/2^(i/2),i=0..300)));

end;


george:= proc(u)

return(geo(u,ceil(u)));

end;


geoN:= proc(u)
=geo(u,u)
return(evalf(1/(1+2^(-u-1))*product(1+1/2^(i/2),i=0..300)));

end;


geoM:= proc(u)
=geo(u-1,u)
return(evalf(2/(1+2^(-u-1))*product(1+1/2^(i/2),i=1..301)));

end;

>

geo := proc (u, b) local R; R := 2^(1/2*u-1/2*b); return evalf((product(1+R/2^(1/2*i), i = 0 .. 300))/((1+2^(-b-1))*R^2)) end proc

george := proc (u) return geo(u, ceil(u)) end proc

geoN := proc (u) return evalf((product(1+1/2^(1/2*i), i = 0 .. 300))/(1+2^(-u-1))) end proc

geoM := proc (u) return evalf(2*(product(1+1/2^(1/2*i), i = 1 .. 301))/(1+2^(-u-1))) end proc

> geoN(0); geoN(10); geoN(20); geoN(30); geoN(40); geoN(50);

10.26445821

15.38917308

15.39667998

15.39668731

15.39668732

15.39668732

> plot(geoN(x),x=-1..50);

[Plot]

> plot3d(geo(x,x+e),x=4..30,e=0..1);

[Plot]

>