12 #include "cln/number.h"
16 #define MAYBE_INLINE inline
17 #include "cl_I_from_NDS.cc"
22 const cl_I DS_to_I (const uintD* MSDptr, uintC len)
24 // erst normalisieren.
25 // Dabei evtl. MSDptr erhöhen und len erniedrigen:
26 if (!(len==0)) // leere DS ist normalisiert
27 { var uintC count = len-1;
28 if ((sintD)mspref(MSDptr,0) >= 0)
30 { // versuche maximal len-1 führende Nullen-Digits zu streichen:
31 while (!(count==0) && (mspref(MSDptr,0)==0) && ((sintD)mspref(MSDptr,1)>=0))
32 { msshrink(MSDptr); len--; count--; } // Nulldigit streichen
36 // versuche maximal len-1 führende Einsen-Digits zu streichen:
37 { while (!(count==0) && ((sintD)mspref(MSDptr,0)==-1) && ((sintD)mspref(MSDptr,1)<0))
38 { msshrink(MSDptr); len--; count--; } // Einsen-digit streichen
40 // Eventuell ist jetzt noch bei der DS 0 ausnahmsweise len=1,
41 // aber NDS_to_I wird auch damit fertig.
42 return NDS_to_I(MSDptr,len);