1#include this file into another test for subclass testing... 2 3use strict; 4use warnings; 5 6ok ($class->config()->{lib},$CL); 7 8my $z; 9 10while (<DATA>) 11 { 12 chomp; 13 $_ =~ s/#.*$//; # remove comments 14 $_ =~ s/\s+$//; # trailing spaces 15 next if /^$/; # skip empty lines & comments 16 if (s/^&//) 17 { 18 $f = $_; 19 } 20 elsif (/^\$/) 21 { 22 $setup = $_; $setup =~ s/\$/\$${class}::/g; # round_mode, div_scale 23 #print "\$setup== $setup\n"; 24 } 25 else 26 { 27 if (m|^(.*?):(/.+)$|) 28 { 29 $ans = $2; 30 @args = split(/:/,$1,99); 31 } 32 else 33 { 34 @args = split(/:/,$_,99); $ans = pop(@args); 35 } 36 $try = "\$x = $class->new(\"$args[0]\");"; 37 if ($f eq "fnorm") 38 { 39 $try .= "\$x;"; 40 } elsif ($f eq "finf") { 41 $try .= "\$x->finf('$args[1]');"; 42 } elsif ($f eq "is_inf") { 43 $try .= "\$x->is_inf('$args[1]');"; 44 } elsif ($f eq "fone") { 45 $try .= "\$x->bone('$args[1]');"; 46 } elsif ($f eq "fstr") { 47 $try .= "\$x->accuracy($args[1]); \$x->precision($args[2]);"; 48 $try .= '$x->fstr();'; 49 } elsif ($f eq "parts") { 50 # ->bstr() to see if an object is returned 51 $try .= '($a,$b) = $x->parts(); $a = $a->bstr(); $b = $b->bstr();'; 52 $try .= '"$a $b";'; 53 } elsif ($f eq "exponent") { 54 # ->bstr() to see if an object is returned 55 $try .= '$x->exponent()->bstr();'; 56 } elsif ($f eq "mantissa") { 57 # ->bstr() to see if an object is returned 58 $try .= '$x->mantissa()->bstr();'; 59 } elsif ($f =~ /^(numify|length|as_number|as_hex|as_bin)$/) { 60 $try .= "\$x->$f();"; 61 # some unary ops (test the fxxx form, since that is done by AUTOLOAD) 62 } elsif ($f =~ /^f(nan|sstr|neg|floor|ceil|abs)$/) { 63 $try .= "\$x->f$1();"; 64 # some is_xxx test function 65 } elsif ($f =~ /^is_(zero|one|negative|positive|odd|even|nan|int)$/) { 66 $try .= "\$x->$f();"; 67 } elsif ($f eq "finc") { 68 $try .= '++$x;'; 69 } elsif ($f eq "fdec") { 70 $try .= '--$x;'; 71 }elsif ($f eq "fround") { 72 $try .= "$setup; \$x->fround($args[1]);"; 73 } elsif ($f eq "ffround") { 74 $try .= "$setup; \$x->ffround($args[1]);"; 75 } elsif ($f eq "fsqrt") { 76 $try .= "$setup; \$x->fsqrt();"; 77 } elsif ($f eq "ffac") { 78 $try .= "$setup; \$x->ffac();"; 79 } elsif ($f eq "flog") { 80 if (defined $args[1] && $args[1] ne '') 81 { 82 $try .= "\$y = $class->new($args[1]);"; 83 $try .= "$setup; \$x->flog(\$y);"; 84 } 85 else 86 { 87 $try .= "$setup; \$x->flog();"; 88 } 89 } 90 else 91 { 92 $try .= "\$y = $class->new(\"$args[1]\");"; 93 94 if ($f eq "bgcd") 95 { 96 if (defined $args[2]) 97 { 98 $try .= " \$z = $class->new(\"$args[2]\"); "; 99 } 100 $try .= "$class\::bgcd(\$x, \$y"; 101 $try .= ", \$z" if (defined $args[2]); 102 $try .= " );"; 103 } 104 elsif ($f eq "blcm") 105 { 106 if (defined $args[2]) 107 { 108 $try .= " \$z = $class->new(\"$args[2]\"); "; 109 } 110 $try .= "$class\::blcm(\$x, \$y"; 111 $try .= ", \$z" if (defined $args[2]); 112 $try .= " );"; 113 } elsif ($f eq "fcmp") { 114 $try .= '$x->fcmp($y);'; 115 } elsif ($f eq "facmp") { 116 $try .= '$x->facmp($y);'; 117 } elsif ($f eq "fpow") { 118 $try .= '$x ** $y;'; 119 } elsif ($f eq "bnok") { 120 $try .= '$x->bnok($y);'; 121 } elsif ($f eq "froot") { 122 $try .= "$setup; \$x->froot(\$y);"; 123 } elsif ($f eq "fadd") { 124 $try .= '$x + $y;'; 125 } elsif ($f eq "fsub") { 126 $try .= '$x - $y;'; 127 } elsif ($f eq "fmul") { 128 $try .= '$x * $y;'; 129 } elsif ($f eq "fdiv") { 130 $try .= "$setup; \$x / \$y;"; 131 } elsif ($f eq "fdiv-list") { 132 $try .= "$setup; join(',',\$x->fdiv(\$y));"; 133 } elsif ($f eq "frsft") { 134 $try .= '$x >> $y;'; 135 } elsif ($f eq "flsft") { 136 $try .= '$x << $y;'; 137 } elsif ($f eq "fmod") { 138 $try .= '$x % $y;'; 139 } else { warn "Unknown op '$f'"; } 140 } 141 # print "# Trying: '$try'\n"; 142 $ans1 = eval $try; 143 print "# Error: $@\n" if $@; 144 if ($ans =~ m|^/(.*)$|) 145 { 146 my $pat = $1; 147 if ($ans1 =~ /$pat/) 148 { 149 ok (1,1); 150 } 151 else 152 { 153 print "# '$try' expected: /$pat/ got: '$ans1'\n" if !ok(1,0); 154 } 155 } 156 else 157 { 158 if ($ans eq "") 159 { 160 ok_undef ($ans1); 161 } 162 else 163 { 164 print "# Tried: '$try'\n" if !ok ($ans1, $ans); 165 if (ref($ans1) eq "$class") 166 { 167 # float numbers are normalized (for now), so mantissa shouldn't have 168 # trailing zeros 169 #print $ans1->_trailing_zeros(),"\n"; 170 print "# Has trailing zeros after '$try'\n" 171 if !ok ($CL->_zeros( $ans1->{_m}), 0); 172 } 173 } 174 } # end pattern or string 175 } 176 } # end while 177 178# check whether $class->new( Math::BigInt->new()) destroys it 179# ($y == 12 in this case) 180$x = Math::BigInt->new(1200); $y = $class->new($x); 181ok ($y,1200); ok ($x,1200); 182 183############################################################################### 184# Really huge, big, ultra-mega-biggy-monster exponents 185# Technically, the exponents should not be limited (they are BigInts), but 186# practically there are a few places were they are limited to a Perl scalar. 187# This is sometimes for speed, sometimes because otherwise the number wouldn't 188# fit into your memory (just think of 1e123456789012345678901234567890 + 1!) 189# anyway. We don't test everything here, but let's make sure it just basically 190# works. 191 192my $monster = '1e1234567890123456789012345678901234567890'; 193 194# new and exponent 195ok ($class->new($monster)->bsstr(), 196 '1e+1234567890123456789012345678901234567890'); 197ok ($class->new($monster)->exponent(), 198 '1234567890123456789012345678901234567890'); 199# cmp 200ok ($class->new($monster) > 0,1); 201 202# sub/mul 203ok ($class->new($monster)->bsub( $monster),0); 204ok ($class->new($monster)->bmul(2)->bsstr(), 205 '2e+1234567890123456789012345678901234567890'); 206 207# mantissa 208$monster = '1234567890123456789012345678901234567890e2'; 209ok ($class->new($monster)->mantissa(), 210 '123456789012345678901234567890123456789'); 211 212############################################################################### 213# zero,inf,one,nan 214 215$x = $class->new(2); $x->fzero(); ok_undef ($x->{_a}); ok_undef ($x->{_p}); 216$x = $class->new(2); $x->finf(); ok_undef ($x->{_a}); ok_undef ($x->{_p}); 217$x = $class->new(2); $x->fone(); ok_undef ($x->{_a}); ok_undef ($x->{_p}); 218$x = $class->new(2); $x->fnan(); ok_undef ($x->{_a}); ok_undef ($x->{_p}); 219 220############################################################################### 221# bone/binf etc as plain calls (Lite failed them) 222 223ok ($class->fzero(),0); 224ok ($class->fone(),1); 225ok ($class->fone('+'),1); 226ok ($class->fone('-'),-1); 227ok ($class->fnan(),'NaN'); 228ok ($class->finf(),'inf'); 229ok ($class->finf('+'),'inf'); 230ok ($class->finf('-'),'-inf'); 231ok ($class->finf('-inf'),'-inf'); 232 233$class->accuracy(undef); $class->precision(undef); # reset 234 235############################################################################### 236# bug in bsstr()/numify() showed up in after-rounding in bdiv() 237 238$x = $class->new('0.008'); $y = $class->new(2); 239$x->bdiv(3,$y); 240ok ($x,'0.0027'); 241 242############################################################################### 243# fsqrt() with set global A/P or A/P enabled on $x, also a test whether fsqrt() 244# correctly modifies $x 245 246$x = $class->new(12); $class->precision(-2); $x->fsqrt(); ok ($x,'3.46'); 247 248$class->precision(undef); 249$x = $class->new(12); $class->precision(0); $x->fsqrt(); ok ($x,'3'); 250 251$class->precision(-3); $x = $class->new(12); $x->fsqrt(); ok ($x,'3.464'); 252 253{ 254 no strict 'refs'; 255 # A and P set => NaN 256 ${${class}.'::accuracy'} = 4; $x = $class->new(12); 257 $x->fsqrt(3); ok ($x,'NaN'); 258 # supplied arg overrides set global 259 $class->precision(undef); $x = $class->new(12); $x->fsqrt(3); ok ($x,'3.46'); 260 $class->accuracy(undef); $class->precision(undef); # reset for further tests 261} 262 263############################################################################# 264# can we call objectify (broken until v1.52) 265 266{ 267 no strict; 268 $try = 269 '@args' . " = $class" . "::objectify(2,$class,4,5);".'join(" ",@args);'; 270 $ans = eval $try; 271 ok ($ans,"$class 4 5"); 272} 273 274############################################################################# 275# is_one('-') (broken until v1.64) 276 277ok ($class->new(-1)->is_one(),0); 278ok ($class->new(-1)->is_one('-'),1); 279 280############################################################################# 281# bug 1/0.5 leaving 2e-0 instead of 2e0 282 283ok ($class->new(1)->fdiv('0.5')->bsstr(),'2e+0'); 284 285############################################################################### 286# [perl #30609] bug with $x -= $x not being 0, but 2*$x 287 288$x = $class->new(3); $x -= $x; ok ($x, 0); 289$x = $class->new(-3); $x -= $x; ok ($x, 0); 290$x = $class->new(3); $x += $x; ok ($x, 6); 291$x = $class->new(-3); $x += $x; ok ($x, -6); 292 293$x = $class->new('NaN'); $x -= $x; ok ($x->is_nan(), 1); 294$x = $class->new('inf'); $x -= $x; ok ($x->is_nan(), 1); 295$x = $class->new('-inf'); $x -= $x; ok ($x->is_nan(), 1); 296 297$x = $class->new('NaN'); $x += $x; ok ($x->is_nan(), 1); 298$x = $class->new('inf'); $x += $x; ok ($x->is_inf(), 1); 299$x = $class->new('-inf'); $x += $x; ok ($x->is_inf('-'), 1); 300 301$x = $class->new('3.14'); $x -= $x; ok ($x, 0); 302$x = $class->new('-3.14'); $x -= $x; ok ($x, 0); 303$x = $class->new('3.14'); $x += $x; ok ($x, '6.28'); 304$x = $class->new('-3.14'); $x += $x; ok ($x, '-6.28'); 305 306$x = $class->new('3.14'); $x *= $x; ok ($x, '9.8596'); 307$x = $class->new('-3.14'); $x *= $x; ok ($x, '9.8596'); 308$x = $class->new('3.14'); $x /= $x; ok ($x, '1'); 309$x = $class->new('-3.14'); $x /= $x; ok ($x, '1'); 310$x = $class->new('3.14'); $x %= $x; ok ($x, '0'); 311$x = $class->new('-3.14'); $x %= $x; ok ($x, '0'); 312 313############################################################################### 314# the following two were reported by "kenny" via hotmail.com: 315 316#perl -MMath::BigFloat -wle 'print Math::BigFloat->new(0)->bpow(".1")' 317#Use of uninitialized value in numeric le (<=) at BigFloat.pm line 1851. 318 319$x = $class->new(0); $y = $class->new('0.1'); 320ok ($x ** $y, 0, 'no warnings and zero result'); 321 322#perl -MMath::BigFloat -lwe 'print Math::BigFloat->new(".222222222222222222222222222222222222222222")->bceil()' 323#Use of uninitialized value in numeric le (<=) at BigFloat.pm line 1851. 324 325$x = $class->new(".222222222222222222222222222222222222222222"); 326ok ($x->bceil(), 1, 'no warnings and one as result'); 327 328############################################################################### 329# test **=, <<=, >>= 330 331# ((2^148)-1)/17 332$x = $class->new(2); $x **= 148; $x++; $x->bdiv(17, 60)->bfloor(); $x->accuracy(undef); 333ok ($x,"20988936657440586486151264256610222593863921"); 334ok ($x->length(),length "20988936657440586486151264256610222593863921"); 335 336$x = $class->new('2'); 337my $y = $class->new('18'); 338ok ($x <<= $y, 2 << 18); 339ok ($x, 2 << 18); 340ok ($x >>= $y, 2); 341ok ($x, 2); 342 343$x = $class->new('2'); 344$y = $class->new('18.2'); 345$x <<= $y; # 2 * (2 ** 18.2); 346 347ok ($x->copy()->bfround(-9), '602248.763144685'); 348ok ($x >>= $y, 2); # 2 * (2 ** 18.2) / (2 ** 18.2) => 2 349ok ($x, 2); 350 3511; # all done 352 353############################################################################### 354# Perl 5.005 does not like ok ($x,undef) 355 356sub ok_undef 357 { 358 my $x = shift; 359 360 ok (1,1) and return if !defined $x; 361 ok ($x,'undef'); 362 } 363 364__DATA__ 365&bgcd 366inf:12:NaN 367-inf:12:NaN 36812:inf:NaN 36912:-inf:NaN 370inf:inf:NaN 371inf:-inf:NaN 372-inf:-inf:NaN 373abc:abc:NaN 374abc:+0:NaN 375+0:abc:NaN 376+0:+0:0 377+0:+1:1 378+1:+0:1 379+1:+1:1 380+2:+3:1 381+3:+2:1 382-3:+2:1 383-3:-2:1 384-144:-60:12 385144:-60:12 386144:60:12 387100:625:25 3884096:81:1 3891034:804:2 39027:90:56:1 39127:90:54:9 392&blcm 393abc:abc:NaN 394abc:+0:NaN 395+0:abc:NaN 396+0:+0:NaN 397+1:+0:0 398+0:+1:0 399+27:+90:270 400+1034:+804:415668 401$div_scale = 40; 402&bnok 403+inf:10:inf 404NaN:NaN:NaN 405NaN:1:NaN 4061:NaN:NaN 4071:1:1 408# k > n 4091:2:0 4102:3:0 411# k < 0 4121:-2:0 413# 7 over 3 = 35 4147:3:35 4157:6:1 416100:90:17310309456440 417&flog 4180::NaN 419-1::NaN 420-2::NaN 421# base > 0, base != 1 4222:-1:NaN 4232:0:NaN 4242:1:NaN 425# log(1) is always 1, regardless of $base 4261::0 4271:1:0 4281:2:0 4292::0.6931471805599453094172321214581765680755 4302.718281828::0.9999999998311266953289851340574956564911 431$div_scale = 20; 4322.718281828::0.99999999983112669533 433$div_scale = 15; 434123::4.81218435537242 43510::2.30258509299405 4361000::6.90775527898214 437100::4.60517018598809 4382::0.693147180559945 4393.1415::1.14470039286086 44012345::9.42100640177928 4410.001::-6.90775527898214 442# bug until v1.71: 44310:10:1 444100:100:1 445# reset for further tests 446$div_scale = 40; 4471::0 448&frsft 449NaNfrsft:2:NaN 4500:2:0 4511:1:0.5 4522:1:1 4534:1:2 454123:1:61.5 45532:3:4 456&flsft 457NaNflsft:0:NaN 4582:1:4 4594:3:32 4605:3:40 4611:2:4 4620:5:0 463&fnorm 4641:1 465-0:0 466fnormNaN:NaN 467+inf:inf 468-inf:-inf 469123:123 470-123.4567:-123.4567 471# invalid inputs 4721__2:NaN 4731E1__2:NaN 47411__2E2:NaN 475.2E-3.:NaN 4761e3e4:NaN 477# strange, but valid 478.2E2:20 4791.E3:1000 480# some inputs that result in zero 4810e0:0 482+0e0:0 483+0e+0:0 484-0e+0:0 4850e-0:0 486-0e-0:0 487+0e-0:0 488000:0 48900e2:0 49000e02:0 491000e002:0 492000e1230:0 49300e-3:0 49400e+3:0 49500e-03:0 49600e+03:0 497-000:0 498-00e2:0 499-00e02:0 500-000e002:0 501-000e1230:0 502-00e-3:0 503-00e+3:0 504-00e-03:0 505-00e+03:0 506&as_number 5070:0 5081:1 5091.2:1 5102.345:2 511-2:-2 512-123.456:-123 513-200:-200 514# test for bug in brsft() not handling cases that return 0 5150.000641:0 5160.0006412:0 5170.00064123:0 5180.000641234:0 5190.0006412345:0 5200.00064123456:0 5210.000641234567:0 5220.0006412345678:0 5230.00064123456789:0 5240.1:0 5250.01:0 5260.001:0 5270.0001:0 5280.00001:0 5290.000001:0 5300.0000001:0 5310.00000001:0 5320.000000001:0 5330.0000000001:0 5340.00000000001:0 5350.12345:0 5360.123456:0 5370.1234567:0 5380.12345678:0 5390.123456789:0 540&finf 5411:+:inf 5422:-:-inf 5433:abc:inf 544&as_hex 545+inf:inf 546-inf:-inf 547hexNaN:NaN 5480:0x0 5495:0x5 550-5:-0x5 551&as_bin 552+inf:inf 553-inf:-inf 554hexNaN:NaN 5550:0b0 5565:0b101 557-5:-0b101 558&numify 559# uses bsstr() so 5 => 5e+0 to be compatible w/ Perls output 5600:0e+1 561+1:1e+0 5621234:1234e+0 563NaN:NaN 564+inf:inf 565-inf:-inf 566-5:-5e+0 567100:1e+2 568-100:-1e+2 569&fnan 570abc:NaN 5712:NaN 572-2:NaN 5730:NaN 574&fone 5752:+:1 576-2:-:-1 577-2:+:1 5782:-:-1 5790::1 580-2::1 581abc::1 5822:abc:1 583&fsstr 584+inf:inf 585-inf:-inf 586abcfsstr:NaN 587-abcfsstr:NaN 5881234.567:1234567e-3 589123:123e+0 590-5:-5e+0 591-100:-1e+2 592&fstr 593+inf:::inf 594-inf:::-inf 595abcfstr:::NaN 5961234.567:9::1234.56700 5971234.567::-6:1234.567000 59812345:5::12345 5990.001234:6::0.00123400 6000.001234::-8:0.00123400 6010:4::0 6020::-4:0.0000 603&fnorm 604inf:inf 605+inf:inf 606-inf:-inf 607+infinity:NaN 608+-inf:NaN 609abc:NaN 610 1 a:NaN 6111bcd2:NaN 61211111b:NaN 613+1z:NaN 614-1z:NaN 6150e999:0 6160e-999:0 617-0e999:0 618-0e-999:0 6190:0 620+0:0 621+00:0 622+0_0_0:0 623000000_0000000_00000:0 624-0:0 625-0000:0 626+1:1 627+01:1 628+001:1 629+00000100000:100000 630123456789:123456789 631-1:-1 632-01:-1 633-001:-1 634-123456789:-123456789 635-00000100000:-100000 636123.456a:NaN 637123.456:123.456 6380.01:0.01 639.002:0.002 640+.2:0.2 641-0.0003:-0.0003 642-.0000000004:-0.0000000004 643123456E2:12345600 644123456E-2:1234.56 645-123456E2:-12345600 646-123456E-2:-1234.56 6471e1:10 6482e-11:0.00000000002 649# exercise _split 650 .02e-1:0.002 651 000001:1 652 -00001:-1 653 -1:-1 654 000.01:0.01 655 -000.0023:-0.0023 656 1.1e1:11 657-3e111:-3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 658-4e-1111:-0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004 659&fpow 660NaN:1:NaN 6611:NaN:NaN 662NaN:-1:NaN 663-1:NaN:NaN 664NaN:-21:NaN 665-21:NaN:NaN 666NaN:21:NaN 66721:NaN:NaN 6680:0:1 6690:1:0 6700:9:0 6710:-2:inf 6722:2:4 6731:2:1 6741:3:1 675-1:2:1 676-1:3:-1 677123.456:2:15241.383936 6782:-2:0.25 6792:-3:0.125 680128:-2:0.00006103515625 681abc:123.456:NaN 682123.456:abc:NaN 683+inf:123.45:inf 684-inf:123.45:-inf 685+inf:-123.45:inf 686-inf:-123.45:-inf 687-2:2:4 688-2:3:-8 689-2:4:16 690-2:5:-32 691-3:2:9 692-3:3:-27 693-3:4:81 694-3:5:-243 695# 2 ** 0.5 == sqrt(2) 696# 1.41..7 and not 1.4170 since fallback (bsqrt(9) is '3', not 3.0...0) 6972:0.5:1.41421356237309504880168872420969807857 698#2:0.2:1.148698354997035006798626946777927589444 699#6:1.5:14.6969384566990685891837044482353483518 700$div_scale = 20; 701#62.5:12.5:26447206647554886213592.3959144 702$div_scale = 40; 703&fneg 704fnegNaN:NaN 705+inf:-inf 706-inf:inf 707+0:0 708+1:-1 709-1:1 710+123456789:-123456789 711-123456789:123456789 712+123.456789:-123.456789 713-123456.789:123456.789 714&fabs 715fabsNaN:NaN 716+inf:inf 717-inf:inf 718+0:0 719+1:1 720-1:1 721+123456789:123456789 722-123456789:123456789 723+123.456789:123.456789 724-123456.789:123456.789 725&fround 726$round_mode = "trunc" 727+inf:5:inf 728-inf:5:-inf 7290:5:0 730NaNfround:5:NaN 731+10123456789:5:10123000000 732-10123456789:5:-10123000000 733+10123456789.123:5:10123000000 734-10123456789.123:5:-10123000000 735+10123456789:9:10123456700 736-10123456789:9:-10123456700 737+101234500:6:101234000 738-101234500:6:-101234000 739$round_mode = "zero" 740+20123456789:5:20123000000 741-20123456789:5:-20123000000 742+20123456789.123:5:20123000000 743-20123456789.123:5:-20123000000 744+20123456789:9:20123456800 745-20123456789:9:-20123456800 746+201234500:6:201234000 747-201234500:6:-201234000 748$round_mode = "+inf" 749+30123456789:5:30123000000 750-30123456789:5:-30123000000 751+30123456789.123:5:30123000000 752-30123456789.123:5:-30123000000 753+30123456789:9:30123456800 754-30123456789:9:-30123456800 755+301234500:6:301235000 756-301234500:6:-301234000 757$round_mode = "-inf" 758+40123456789:5:40123000000 759-40123456789:5:-40123000000 760+40123456789.123:5:40123000000 761-40123456789.123:5:-40123000000 762+40123456789:9:40123456800 763-40123456789:9:-40123456800 764+401234500:6:401234000 765-401234500:6:-401235000 766$round_mode = "odd" 767+50123456789:5:50123000000 768-50123456789:5:-50123000000 769+50123456789.123:5:50123000000 770-50123456789.123:5:-50123000000 771+50123456789:9:50123456800 772-50123456789:9:-50123456800 773+501234500:6:501235000 774-501234500:6:-501235000 775$round_mode = "even" 776+60123456789:5:60123000000 777-60123456789:5:-60123000000 778+60123456789:9:60123456800 779-60123456789:9:-60123456800 780+601234500:6:601234000 781-601234500:6:-601234000 782+60123456789.0123:5:60123000000 783-60123456789.0123:5:-60123000000 784$round_mode = "common" 785+60123456789:5:60123000000 786-60123456789:5:-60123000000 787+60123456789:6:60123500000 788-60123456789:6:-60123500000 789+60123456789:9:60123456800 790-60123456789:9:-60123456800 791+601234500:6:601235000 792-601234500:6:-601235000 793+601234400:6:601234000 794-601234400:6:-601234000 795+601234600:6:601235000 796-601234600:6:-601235000 797+601234300:6:601234000 798+60123456789.0123:5:60123000000 799-60123456789.0123:5:-60123000000 800&ffround 801$round_mode = "trunc" 802+inf:5:inf 803-inf:5:-inf 8040:5:0 805NaNffround:5:NaN 806+1.23:-1:1.2 807+1.234:-1:1.2 808+1.2345:-1:1.2 809+1.23:-2:1.23 810+1.234:-2:1.23 811+1.2345:-2:1.23 812+1.23:-3:1.230 813+1.234:-3:1.234 814+1.2345:-3:1.234 815-1.23:-1:-1.2 816+1.27:-1:1.2 817-1.27:-1:-1.2 818+1.25:-1:1.2 819-1.25:-1:-1.2 820+1.35:-1:1.3 821-1.35:-1:-1.3 822-0.0061234567890:-1:0.0 823-0.0061:-1:0.0 824-0.00612:-1:0.0 825-0.00612:-2:0.00 826-0.006:-1:0.0 827-0.006:-2:0.00 828-0.0006:-2:0.00 829-0.0006:-3:0.000 830-0.0065:-3:/-0\.006|-6e-03 831-0.0065:-4:/-0\.006(?:5|49{5}\d+)|-6\.5e-03 832-0.0065:-5:/-0\.006(?:5|49{5}\d+)|-6\.5e-03 8330.05:0:0 8340.5:0:0 8350.51:0:0 8360.41:0:0 837$round_mode = "zero" 838+2.23:-1:/2.2(?:0{5}\d+)? 839-2.23:-1:/-2.2(?:0{5}\d+)? 840+2.27:-1:/2.(?:3|29{5}\d+) 841-2.27:-1:/-2.(?:3|29{5}\d+) 842+2.25:-1:/2.2(?:0{5}\d+)? 843-2.25:-1:/-2.2(?:0{5}\d+)? 844+2.35:-1:/2.(?:3|29{5}\d+) 845-2.35:-1:/-2.(?:3|29{5}\d+) 846-0.0065:-1:0.0 847-0.0065:-2:/-0\.01|-1e-02 848-0.0065:-3:/-0\.006|-6e-03 849-0.0065:-4:/-0\.006(?:5|49{5}\d+)|-6\.5e-03 850-0.0065:-5:/-0\.006(?:5|49{5}\d+)|-6\.5e-03 8510.05:0:0 8520.5:0:0 8530.51:0:1 8540.41:0:0 855$round_mode = "+inf" 856+3.23:-1:/3.2(?:0{5}\d+)? 857-3.23:-1:/-3.2(?:0{5}\d+)? 858+3.27:-1:/3.(?:3|29{5}\d+) 859-3.27:-1:/-3.(?:3|29{5}\d+) 860+3.25:-1:/3.(?:3|29{5}\d+) 861-3.25:-1:/-3.2(?:0{5}\d+)? 862+3.35:-1:/3.(?:4|39{5}\d+) 863-3.35:-1:/-3.(?:3|29{5}\d+) 864-0.0065:-1:0.0 865-0.0065:-2:/-0\.01|-1e-02 866-0.0065:-3:/-0\.006|-6e-03 867-0.0065:-4:/-0\.006(?:5|49{5}\d+)|-6\.5e-03 868-0.0065:-5:/-0\.006(?:5|49{5}\d+)|-6\.5e-03 8690.05:0:0 8700.5:0:1 8710.51:0:1 8720.41:0:0 873$round_mode = "-inf" 874+4.23:-1:/4.2(?:0{5}\d+)? 875-4.23:-1:/-4.2(?:0{5}\d+)? 876+4.27:-1:/4.(?:3|29{5}\d+) 877-4.27:-1:/-4.(?:3|29{5}\d+) 878+4.25:-1:/4.2(?:0{5}\d+)? 879-4.25:-1:/-4.(?:3|29{5}\d+) 880+4.35:-1:/4.(?:3|29{5}\d+) 881-4.35:-1:/-4.(?:4|39{5}\d+) 882-0.0065:-1:0.0 883-0.0065:-2:/-0\.01|-1e-02 884-0.0065:-3:/-0\.007|-7e-03 885-0.0065:-4:/-0\.006(?:5|49{5}\d+)|-6\.5e-03 886-0.0065:-5:/-0\.006(?:5|49{5}\d+)|-6\.5e-03 8870.05:0:0 8880.5:0:0 8890.51:0:1 8900.41:0:0 891$round_mode = "odd" 892+5.23:-1:/5.2(?:0{5}\d+)? 893-5.23:-1:/-5.2(?:0{5}\d+)? 894+5.27:-1:/5.(?:3|29{5}\d+) 895-5.27:-1:/-5.(?:3|29{5}\d+) 896+5.25:-1:/5.(?:3|29{5}\d+) 897-5.25:-1:/-5.(?:3|29{5}\d+) 898+5.35:-1:/5.(?:3|29{5}\d+) 899-5.35:-1:/-5.(?:3|29{5}\d+) 900-0.0065:-1:0.0 901-0.0065:-2:/-0\.01|-1e-02 902-0.0065:-3:/-0\.007|-7e-03 903-0.0065:-4:/-0\.006(?:5|49{5}\d+)|-6\.5e-03 904-0.0065:-5:/-0\.006(?:5|49{5}\d+)|-6\.5e-03 9050.05:0:0 9060.5:0:1 9070.51:0:1 9080.41:0:0 909$round_mode = "even" 910+6.23:-1:/6.2(?:0{5}\d+)? 911-6.23:-1:/-6.2(?:0{5}\d+)? 912+6.27:-1:/6.(?:3|29{5}\d+) 913-6.27:-1:/-6.(?:3|29{5}\d+) 914+6.25:-1:/6.(?:2(?:0{5}\d+)?|29{5}\d+) 915-6.25:-1:/-6.(?:2(?:0{5}\d+)?|29{5}\d+) 916+6.35:-1:/6.(?:4|39{5}\d+|29{8}\d+) 917-6.35:-1:/-6.(?:4|39{5}\d+|29{8}\d+) 918-0.0065:-1:0.0 919-0.0065:-2:/-0\.01|-1e-02 920-0.0065:-3:/-0\.006|-7e-03 921-0.0065:-4:/-0\.006(?:5|49{5}\d+)|-6\.5e-03 922-0.0065:-5:/-0\.006(?:5|49{5}\d+)|-6\.5e-03 9230.05:0:0 9240.5:0:0 9250.51:0:1 9260.41:0:0 9270.01234567:-3:0.012 9280.01234567:-4:0.0123 9290.01234567:-5:0.01235 9300.01234567:-6:0.012346 9310.01234567:-7:0.0123457 9320.01234567:-8:0.01234567 9330.01234567:-9:0.012345670 9340.01234567:-12:0.012345670000 935&fcmp 936fcmpNaN:fcmpNaN: 937fcmpNaN:+0: 938+0:fcmpNaN: 939+0:+0:0 940-1:+0:-1 941+0:-1:1 942+1:+0:1 943+0:+1:-1 944-1:+1:-1 945+1:-1:1 946-1:-1:0 947+1:+1:0 948-1.1:0:-1 949+0:-1.1:1 950+1.1:+0:1 951+0:+1.1:-1 952+123:+123:0 953+123:+12:1 954+12:+123:-1 955-123:-123:0 956-123:-12:-1 957-12:-123:1 958+123:+124:-1 959+124:+123:1 960-123:-124:1 961-124:-123:-1 9620:0.01:-1 9630:0.0001:-1 9640:-0.0001:1 9650:-0.1:1 9660.1:0:1 9670.00001:0:1 968-0.0001:0:-1 969-0.1:0:-1 9700:0.0001234:-1 9710:-0.0001234:1 9720.0001234:0:1 973-0.0001234:0:-1 9740.0001:0.0005:-1 9750.0005:0.0001:1 9760.005:0.0001:1 9770.001:0.0005:1 9780.000001:0.0005:-1 9790.00000123:0.0005:-1 9800.00512:0.0001:1 9810.005:0.000112:1 9820.00123:0.0005:1 9831.5:2:-1 9842:1.5:1 9851.54321:234:-1 986234:1.54321:1 987# infinity 988-inf:5432112345:-1 989+inf:5432112345:1 990-inf:-5432112345:-1 991+inf:-5432112345:1 992-inf:54321.12345:-1 993+inf:54321.12345:1 994-inf:-54321.12345:-1 995+inf:-54321.12345:1 996+inf:+inf:0 997-inf:-inf:0 998+inf:-inf:1 999-inf:+inf:-1 1000# return undef 1001+inf:NaN: 1002NaN:inf: 1003-inf:NaN: 1004NaN:-inf: 1005&facmp 1006fcmpNaN:fcmpNaN: 1007fcmpNaN:+0: 1008+0:fcmpNaN: 1009+0:+0:0 1010-1:+0:1 1011+0:-1:-1 1012+1:+0:1 1013+0:+1:-1 1014-1:+1:0 1015+1:-1:0 1016-1:-1:0 1017+1:+1:0 1018-1.1:0:1 1019+0:-1.1:-1 1020+1.1:+0:1 1021+0:+1.1:-1 1022+123:+123:0 1023+123:+12:1 1024+12:+123:-1 1025-123:-123:0 1026-123:-12:1 1027-12:-123:-1 1028+123:+124:-1 1029+124:+123:1 1030-123:-124:-1 1031-124:-123:1 10320:0.01:-1 10330:0.0001:-1 10340:-0.0001:-1 10350:-0.1:-1 10360.1:0:1 10370.00001:0:1 1038-0.0001:0:1 1039-0.1:0:1 10400:0.0001234:-1 10410:-0.0001234:-1 10420.0001234:0:1 1043-0.0001234:0:1 10440.0001:0.0005:-1 10450.0005:0.0001:1 10460.005:0.0001:1 10470.001:0.0005:1 10480.000001:0.0005:-1 10490.00000123:0.0005:-1 10500.00512:0.0001:1 10510.005:0.000112:1 10520.00123:0.0005:1 10531.5:2:-1 10542:1.5:1 10551.54321:234:-1 1056234:1.54321:1 1057# infinity 1058-inf:5432112345:1 1059+inf:5432112345:1 1060-inf:-5432112345:1 1061+inf:-5432112345:1 1062-inf:54321.12345:1 1063+inf:54321.12345:1 1064-inf:-54321.12345:1 1065+inf:-54321.12345:1 1066+inf:+inf:0 1067-inf:-inf:0 1068+inf:-inf:0 1069-inf:+inf:0 10705:inf:-1 1071-1:inf:-1 10725:-inf:-1 1073-1:-inf:-1 1074# return undef 1075+inf:facmpNaN: 1076facmpNaN:inf: 1077-inf:facmpNaN: 1078facmpNaN:-inf: 1079&fdec 1080fdecNaN:NaN 1081+inf:inf 1082-inf:-inf 1083+0:-1 1084+1:0 1085-1:-2 10861.23:0.23 1087-1.23:-2.23 1088100:99 1089101:100 1090-100:-101 1091-99:-100 1092-98:-99 109399:98 1094&finc 1095fincNaN:NaN 1096+inf:inf 1097-inf:-inf 1098+0:1 1099+1:2 1100-1:0 11011.23:2.23 1102-1.23:-0.23 1103100:101 1104-100:-99 1105-99:-98 1106-101:-100 110799:100 1108&fadd 1109abc:abc:NaN 1110abc:+0:NaN 1111+0:abc:NaN 1112+inf:-inf:NaN 1113-inf:+inf:NaN 1114+inf:+inf:inf 1115-inf:-inf:-inf 1116baddNaN:+inf:NaN 1117baddNaN:+inf:NaN 1118+inf:baddNaN:NaN 1119-inf:baddNaN:NaN 1120+0:+0:0 1121+1:+0:1 1122+0:+1:1 1123+1:+1:2 1124-1:+0:-1 1125+0:-1:-1 1126-1:-1:-2 1127-1:+1:0 1128+1:-1:0 1129+9:+1:10 1130+99:+1:100 1131+999:+1:1000 1132+9999:+1:10000 1133+99999:+1:100000 1134+999999:+1:1000000 1135+9999999:+1:10000000 1136+99999999:+1:100000000 1137+999999999:+1:1000000000 1138+9999999999:+1:10000000000 1139+99999999999:+1:100000000000 1140+10:-1:9 1141+100:-1:99 1142+1000:-1:999 1143+10000:-1:9999 1144+100000:-1:99999 1145+1000000:-1:999999 1146+10000000:-1:9999999 1147+100000000:-1:99999999 1148+1000000000:-1:999999999 1149+10000000000:-1:9999999999 1150+123456789:+987654321:1111111110 1151-123456789:+987654321:864197532 1152-123456789:-987654321:-1111111110 1153+123456789:-987654321:-864197532 11540.001234:0.0001234:0.0013574 1155&fsub 1156abc:abc:NaN 1157abc:+0:NaN 1158+0:abc:NaN 1159+inf:-inf:inf 1160-inf:+inf:-inf 1161+inf:+inf:NaN 1162-inf:-inf:NaN 1163baddNaN:+inf:NaN 1164baddNaN:+inf:NaN 1165+inf:baddNaN:NaN 1166-inf:baddNaN:NaN 1167+0:+0:0 1168+1:+0:1 1169+0:+1:-1 1170+1:+1:0 1171-1:+0:-1 1172+0:-1:1 1173-1:-1:0 1174-1:+1:-2 1175+1:-1:2 1176+9:+1:8 1177+99:+1:98 1178+999:+1:998 1179+9999:+1:9998 1180+99999:+1:99998 1181+999999:+1:999998 1182+9999999:+1:9999998 1183+99999999:+1:99999998 1184+999999999:+1:999999998 1185+9999999999:+1:9999999998 1186+99999999999:+1:99999999998 1187+10:-1:11 1188+100:-1:101 1189+1000:-1:1001 1190+10000:-1:10001 1191+100000:-1:100001 1192+1000000:-1:1000001 1193+10000000:-1:10000001 1194+100000000:-1:100000001 1195+1000000000:-1:1000000001 1196+10000000000:-1:10000000001 1197+123456789:+987654321:-864197532 1198-123456789:+987654321:-1111111110 1199-123456789:-987654321:864197532 1200+123456789:-987654321:1111111110 1201&fmul 1202abc:abc:NaN 1203abc:+0:NaN 1204+0:abc:NaN 1205+inf:NaNmul:NaN 1206+inf:NaNmul:NaN 1207NaNmul:+inf:NaN 1208NaNmul:-inf:NaN 1209+inf:+inf:inf 1210+inf:-inf:-inf 1211+inf:-inf:-inf 1212+inf:+inf:inf 1213+inf:123.34:inf 1214+inf:-123.34:-inf 1215-inf:123.34:-inf 1216-inf:-123.34:inf 1217123.34:+inf:inf 1218-123.34:+inf:-inf 1219123.34:-inf:-inf 1220-123.34:-inf:inf 1221+0:+0:0 1222+0:+1:0 1223+1:+0:0 1224+0:-1:0 1225-1:+0:0 1226+123456789123456789:+0:0 1227+0:+123456789123456789:0 1228-1:-1:1 1229-1:+1:-1 1230+1:-1:-1 1231+1:+1:1 1232+2:+3:6 1233-2:+3:-6 1234+2:-3:-6 1235-2:-3:6 1236+111:+111:12321 1237+10101:+10101:102030201 1238+1001001:+1001001:1002003002001 1239+100010001:+100010001:10002000300020001 1240+10000100001:+10000100001:100002000030000200001 1241+11111111111:+9:99999999999 1242+22222222222:+9:199999999998 1243+33333333333:+9:299999999997 1244+44444444444:+9:399999999996 1245+55555555555:+9:499999999995 1246+66666666666:+9:599999999994 1247+77777777777:+9:699999999993 1248+88888888888:+9:799999999992 1249+99999999999:+9:899999999991 12506:120:720 125110:10000:100000 1252&fdiv-list 12530:0:NaN,NaN 12540:1:0,0 12559:4:2.25,1 12569:5:1.8,4 1257# bug in v1.74 with bdiv in list context, when $y is 1 or -1 12582.1:-1:-2.1,0 12592.1:1:2.1,0 1260-2.1:-1:2.1,0 1261-2.1:1:-2.1,0 1262&fdiv 1263$div_scale = 40; $round_mode = 'even' 1264abc:abc:NaN 1265abc:+1:abc:NaN 1266+1:abc:NaN 1267-1:abc:NaN 12680:abc:NaN 1269+0:+0:NaN 1270+0:+1:0 1271+1:+0:inf 1272+3214:+0:inf 1273+0:-1:0 1274-1:+0:-inf 1275-3214:+0:-inf 1276+1:+1:1 1277-1:-1:1 1278+1:-1:-1 1279-1:+1:-1 1280+1:+2:0.5 1281+2:+1:2 1282123:+inf:0 1283123:-inf:0 1284+10:+5:2 1285+100:+4:25 1286+1000:+8:125 1287+10000:+16:625 1288+10000:-16:-625 1289+999999999999:+9:111111111111 1290+999999999999:+99:10101010101 1291+999999999999:+999:1001001001 1292+999999999999:+9999:100010001 1293+999999999999999:+99999:10000100001 1294+1000000000:+9:111111111.1111111111111111111111111111111 1295+2000000000:+9:222222222.2222222222222222222222222222222 1296+3000000000:+9:333333333.3333333333333333333333333333333 1297+4000000000:+9:444444444.4444444444444444444444444444444 1298+5000000000:+9:555555555.5555555555555555555555555555556 1299+6000000000:+9:666666666.6666666666666666666666666666667 1300+7000000000:+9:777777777.7777777777777777777777777777778 1301+8000000000:+9:888888888.8888888888888888888888888888889 1302+9000000000:+9:1000000000 1303+35500000:+113:314159.2920353982300884955752212389380531 1304+71000000:+226:314159.2920353982300884955752212389380531 1305+106500000:+339:314159.2920353982300884955752212389380531 1306+1000000000:+3:333333333.3333333333333333333333333333333 13072:25.024996000799840031993601279744051189762:0.07992009269196593320152084692285869265447 1308123456:1:123456 1309$div_scale = 20 1310+1000000000:+9:111111111.11111111111 1311+2000000000:+9:222222222.22222222222 1312+3000000000:+9:333333333.33333333333 1313+4000000000:+9:444444444.44444444444 1314+5000000000:+9:555555555.55555555556 1315+6000000000:+9:666666666.66666666667 1316+7000000000:+9:777777777.77777777778 1317+8000000000:+9:888888888.88888888889 1318+9000000000:+9:1000000000 13191:10:0.1 13201:100:0.01 13211:1000:0.001 13221:10000:0.0001 13231:504:0.001984126984126984127 13242:1.987654321:1.0062111801179738436 1325123456789.123456789123456789123456789:1:123456789.12345678912 1326# the next two cases are the "old" behaviour, but are now (>v0.01) different 1327#+35500000:+113:314159.292035398230088 1328#+71000000:+226:314159.292035398230088 1329+35500000:+113:314159.29203539823009 1330+71000000:+226:314159.29203539823009 1331+106500000:+339:314159.29203539823009 1332+1000000000:+3:333333333.33333333333 1333$div_scale = 1 1334# round to accuracy 1 after bdiv 1335+124:+3:40 1336123456789.1234:1:100000000 1337# reset scale for further tests 1338$div_scale = 40 1339&fmod 1340+9:4:1 1341+9:5:4 1342+9000:56:40 1343+56:9000:56 1344# inf handling, see table in doc 13450:inf:0 13460:-inf:0 13475:inf:5 13485:-inf:5 1349-5:inf:-5 1350-5:-inf:-5 1351inf:5:0 1352-inf:5:0 1353inf:-5:0 1354-inf:-5:0 13555:5:0 1356-5:-5:0 1357inf:inf:NaN 1358-inf:-inf:NaN 1359-inf:inf:NaN 1360inf:-inf:NaN 13618:0:8 1362inf:0:inf 1363# exceptions to reminder rule 1364-inf:0:-inf 1365-8:0:-8 13660:0:NaN 1367abc:abc:NaN 1368abc:1:abc:NaN 13691:abc:NaN 13700:0:NaN 13710:1:0 13721:0:1 13730:-1:0 1374-1:0:-1 13751:1:0 1376-1:-1:0 13771:-1:0 1378-1:1:0 13791:2:1 13802:1:0 13811000000000:9:1 13822000000000:9:2 13833000000000:9:3 13844000000000:9:4 13855000000000:9:5 13866000000000:9:6 13877000000000:9:7 13888000000000:9:8 13899000000000:9:0 139035500000:113:33 139171000000:226:66 1392106500000:339:99 13931000000000:3:1 139410:5:0 1395100:4:0 13961000:8:0 139710000:16:0 1398999999999999:9:0 1399999999999999:99:0 1400999999999999:999:0 1401999999999999:9999:0 1402999999999999999:99999:0 1403-9:+5:1 1404+9:-5:-1 1405-9:-5:-4 1406-5:3:1 1407-2:3:1 14084:3:1 14091:3:1 1410-5:-3:-2 1411-2:-3:-2 14124:-3:-2 14131:-3:-2 14144095:4095:0 1415100041000510123:3:0 1416152403346:12345:4321 141787654321:87654321:0 1418# now some floating point tests 1419123:2.5:0.5 14201230:2.5:0 1421123.4:2.5:0.9 1422123e1:25:5 1423-2.1:1:0.9 14242.1:1:0.1 1425-2.1:-1:-0.1 14262.1:-1:-0.9 1427-3:1:0 14283:1:0 1429-3:-1:0 14303:-1:0 1431&ffac 1432Nanfac:NaN 1433-1:NaN 1434+inf:inf 1435-inf:NaN 14360:1 14371:1 14382:2 14393:6 14404:24 14415:120 14426:720 144310:3628800 144411:39916800 144512:479001600 1446&froot 1447# sqrt() 1448+0:2:0 1449+1:2:1 1450-1:2:NaN 1451# -$x ** (1/2) => -$y, but not in froot() 1452-123.456:2:NaN 1453+inf:2:inf 1454-inf:2:NaN 14552:2:1.41421356237309504880168872420969807857 1456-2:2:NaN 14574:2:2 14589:2:3 145916:2:4 1460100:2:10 1461123.456:2:11.11107555549866648462149404118219234119 146215241.38393:2:123.4559999756998444766131352122991626468 14631.44:2:1.2 146412:2:3.464101615137754587054892683011744733886 14650.49:2:0.7 14660.0049:2:0.07 1467# invalid ones 14681:NaN:NaN 1469-1:NaN:NaN 14700:NaN:NaN 1471-inf:NaN:NaN 1472+inf:NaN:NaN 1473NaN:0:NaN 1474NaN:2:NaN 1475NaN:inf:NaN 1476NaN:inf:NaN 147712:-inf:NaN 147812:inf:NaN 1479+0:0:NaN 1480+1:0:NaN 1481-1:0:NaN 1482-2:0:NaN 1483-123.45:0:NaN 1484+inf:0:NaN 148512:1:12 1486-12:1:NaN 14878:-1:NaN 1488-8:-1:NaN 1489# cubic root 14908:3:2 1491-8:3:NaN 1492# fourths root 149316:4:2 149481:4:3 1495# see t/bigroot() for more tests 1496&fsqrt 1497+0:0 1498-1:NaN 1499-2:NaN 1500-16:NaN 1501-123.45:NaN 1502nanfsqrt:NaN 1503+inf:inf 1504-inf:NaN 15051:1 15062:1.41421356237309504880168872420969807857 15074:2 15089:3 150916:4 1510100:10 1511123.456:11.11107555549866648462149404118219234119 151215241.38393:123.4559999756998444766131352122991626468 15131.44:1.2 1514# sqrt(1.44) = 1.2, sqrt(e10) = e5 => 12e4 15151.44E10:120000 15162e10:141421.356237309504880168872420969807857 1517144e20:120000000000 1518# proved to be an endless loop under 7-9 151912:3.464101615137754587054892683011744733886 15200.49:0.7 15210.0049:0.07 1522&is_nan 1523123:0 1524abc:1 1525NaN:1 1526-123:0 1527&is_inf 1528+inf::1 1529-inf::1 1530abc::0 15311::0 1532NaN::0 1533-1::0 1534+inf:-:0 1535+inf:+:1 1536-inf:-:1 1537-inf:+:0 1538# it must be exactly /^[+-]inf$/ 1539+infinity::0 1540-infinity::0 1541&is_odd 1542abc:0 15430:0 1544-1:1 1545-3:1 15461:1 15473:1 15481000001:1 15491000002:0 1550+inf:0 1551-inf:0 1552123.45:0 1553-123.45:0 15542:0 1555&is_int 1556NaNis_int:0 15570:1 15581:1 15592:1 1560-2:1 1561-1:1 1562-inf:0 1563+inf:0 1564123.4567:0 1565-0.1:0 1566-0.002:0 1567&is_even 1568abc:0 15690:1 1570-1:0 1571-3:0 15721:0 15733:0 15741000001:0 15751000002:1 15762:1 1577+inf:0 1578-inf:0 1579123.456:0 1580-123.456:0 15810.01:0 1582-0.01:0 1583120:1 15841200:1 1585-1200:1 1586&is_positive 15870:0 15881:1 1589-1:0 1590-123:0 1591NaN:0 1592-inf:0 1593+inf:1 1594&is_negative 15950:0 15961:0 1597-1:1 1598-123:1 1599NaN:0 1600-inf:1 1601+inf:0 1602&parts 16030:0 1 16041:1 0 1605123:123 0 1606-123:-123 0 1607-1200:-12 2 1608NaNparts:NaN NaN 1609+inf:inf inf 1610-inf:-inf inf 1611&exponent 16120:1 16131:0 1614123:0 1615-123:0 1616-1200:2 1617+inf:inf 1618-inf:inf 1619NaNexponent:NaN 1620&mantissa 16210:0 16221:1 1623123:123 1624-123:-123 1625-1200:-12 1626+inf:inf 1627-inf:-inf 1628NaNmantissa:NaN 1629&length 1630123:3 1631-123:3 16320:1 16331:1 163412345678901234567890:20 1635&is_zero 1636NaNzero:0 1637+inf:0 1638-inf:0 16390:1 1640-1:0 16411:0 1642&is_one 1643NaNone:0 1644+inf:0 1645-inf:0 16460:0 16472:0 16481:1 1649-1:0 1650-2:0 1651&ffloor 16520:0 1653abc:NaN 1654+inf:inf 1655-inf:-inf 16561:1 1657-51:-51 1658-51.2:-52 165912.2:12 16600.12345:0 16610.123456:0 16620.1234567:0 16630.12345678:0 16640.123456789:0 1665&fceil 16660:0 1667abc:NaN 1668+inf:inf 1669-inf:-inf 16701:1 1671-51:-51 1672-51.2:-51 167312.2:13 1674