| Ruud H.G. van Tol on Sun, 15 Dec 2024 18:31:30 +0100 |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
| fdigits() implementation |
First try:
fdigits( v, c=precision(.), s=1 )= {
localprec( max( c+s+8, precision(.)+1 ) );
while( type(v) == "t_CLOSURE", v=v() );
localprec( max( precision(v+.)+1, precision(.) ) );
v+=.;
my( r=digits( v * 10^(c+s-2) \ 1 ) );
if( #r < c+s-1, r= concat( vector(c+s-1-#r), r ) );
if( s > #r, s= 0 );
r= r[ s .. -1 ];
if( c < #r, r= r[ 1 .. c ] );
r;
}
Some example runs:
? precision(.)
% 38
? fdigits( 1 - 10^-20, 24 )
% [0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0]
? #fdigits( Pi )
% 38
? fdigits( Pi, 10, 761 )
ERROR
? fdigits( ()->Pi, 10, 761 )
% [3, 4, 9, 9, 9, 9, 9, 9, 8, 3]
? fdigits( ()->Pi, 10, 19991 )
% [4, 0, 4, 9, 0, 7, 5, 5, 1, 7]
-- Ruud