Bill Allombert on Thu, 29 Oct 2015 12:33:28 +0100


[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]

Re: Faster digits and fromdigits in base 2^k, and FlxqM_mul_Kronecker


On Wed, Oct 28, 2015 at 02:38:43PM +0100, Peter Bruin wrote:
> Hi Bill,
> 
> > as I understand, x[i] is treated as a ulong, and not as a long.  The
> > meaning of "here $k$ may be any positive \kbd{long}." should be
> > clarified to be more explicit when k is equal or larger than
> > BITS_IN_LONG
> >
> > But more importantly, the fromdigits_2k_zv should be called
> > zv_fromdigits_2k, because the input is a zv and not the output.
> >
> > And in fact, more accurately, it should be nv_fromdigits_2k because
> > the entries are treated as unsigned.  (the original functions
> > binary_2k_zv and binary_zv have the same problem)
> 
> Here are updated patches (the first for the fromdigits_2k and binary_2k
> functions, the second to use them in FlxqM_mul_Kronecker).  Apart from
> simply renaming fromdigits_2k_zv to nv_fromdigits_2k, I clarified the
> documentation as follows:
> 
> --- a/doc/usersch5.tex
> +++ b/doc/usersch5.tex
> @@ -2373,9 +2373,11 @@
>  where each $x[i]$ is a \typ{INT} with $0\leq x[i] < 2^k$, return the
>  integer $\sum_{i = 1}^l x[i] 2^{k(l-i)}$, as a \typ{INT}.
>  
> -\fun{GEN}{fromdigits_2k_zv}{GEN x, long k} as \tet{fromdigits_2k}, but
> -with $x$ being a \typ{VECSMALL} and each $x[i]$ being a \kbd{long}
> -with $0\leq x[i] < 2^k$; here $k$ may be any positive \kbd{long}.
> +\fun{GEN}{nv_fromdigits_2k}{GEN x, long k} as \tet{fromdigits_2k}, but
> +with $x$ being a \typ{VECSMALL} and each $x[i]$ being a \kbd{ulong}
> +with $0\leq x[i] < 2^{\min\{k,\tet{BITS_IN_LONG}\}}$.  Here $k$ may be
> +any positive \kbd{long}, and the $x[i]$ are regarded as $k$-bit
> +integers by truncating or extending with zeroes.
>  
>  \subsec{Integer valuation}
>  For integers $x$ and $p$, such that $x\neq 0$ and $|p| > 1$, we define
> 
> I hope this addresses your point.

Yes, this is much clearer.

However 
make test-digits
fails
and
? fromdigits([1,0,1],2)
%1 = 7
is not good.

the line 166 in fromdigits_2k
  if (k == 1) return bits_to_int(x, l);

does not seem correct.

Cheers,
Bill.

PS: next time, you might want to look at 'git format-patch' to generate the patches.
Also, you should try 'make checkspaces'.