Fantastic. Thanks Alex! On Sun, Dec 12, 2021 at 4:33 AM Alexander Burger <a...@software-lab.de> wrote:
> Hi Kevin, hi all, > > On Thu, Dec 09, 2021 at 09:40:51PM +0100, Alexander Burger wrote: > > The conversion function can easily detect the type (short or big) when > > converting to float, and overflow to bignum if necessary when converting > back > > to PicoLisp numbers. > > > > This should really be fixed ... I check it next weekend. > > Done! > > Now (version 21.12.12), 'native', '%@' and 'struct' accept bignums for > floating > point arguments, and overflow to bignums for large floating point return > values. > > : (scl 16) (load "@lib/math.l") > > : (pow 2.0 3.0) # This worked before > -> 80000000000000000 > > : (round @) > -> "8.000" > > : (pow 100.0 100.0) # This did not work > -> > 1000000000000000021421546958041957442493134746744949294176709095342291740583330369404881029347127449862957279318330932090828950478869943421594604148335480073467842242942440201823873880805647866312652703956229962072064 > : (round @) > -> > "100,000,000,000,000,002,142,1546,958,041,957,442,493,1347,467,449,492,941,7670,909,534,229,174,058,3330,369,404,881,029,347,1274,498,629,572,793,1833,093,209,082,895,047,8869,943,421,594,604,148,3354,800,734,678,422,4294,244,020,182,387,388,0805,647,866,312,652,703,96" > > > : (exp 200.0) > -> > 7225973768125748468397301945341163734494552068524857298000992785760626356404779312666861737888136036352 > > : (log @) > -> 2000000000000000000 > : (round @) > -> "200.000" > > Also, it returns now 'T' for values too large to be represented as a > floating > point number (i.e. "infinite"), and 'NIL' for too small values. > > : (pow 1000.0 1000.0) > -> T > > : (exp 1000.0) > -> T > > Note that for the scale there is still a maximum of 18 (i.e. a short > number for > the specification 1.0). IEEE 'double' support only 15 digits anyway. > > ☺/ A!ex > > -- > UNSUBSCRIBE: mailto:picolisp@software-lab.de?subject=Unsubscribe >