1#include this file into another test for subclass testing... 2 3ok ($class->config()->{lib},$CL); 4 5use strict; 6 7my $z; 8 9while (<DATA>) 10 { 11 $_ =~ s/[\n\r]//g; # remove newlines 12 $_ =~ s/#.*$//; # remove comments 13 $_ =~ s/\s+$//; # trailing spaces 14 next if /^$/; # skip empty lines & comments 15 if (s/^&//) 16 { 17 $f = $_; 18 } 19 elsif (/^\$/) 20 { 21 $setup = $_; $setup =~ s/\$/\$${class}::/g; # round_mode, div_scale 22 #print "\$setup== $setup\n"; 23 } 24 else 25 { 26 if (m|^(.*?):(/.+)$|) 27 { 28 $ans = $2; 29 @args = split(/:/,$1,99); 30 } 31 else 32 { 33 @args = split(/:/,$_,99); $ans = pop(@args); 34 } 35 $try = "\$x = $class->new(\"$args[0]\");"; 36 if ($f eq "fnorm") 37 { 38 $try .= "\$x;"; 39 } elsif ($f eq "finf") { 40 $try .= "\$x->finf('$args[1]');"; 41 } elsif ($f eq "is_inf") { 42 $try .= "\$x->is_inf('$args[1]');"; 43 } elsif ($f eq "fone") { 44 $try .= "\$x->bone('$args[1]');"; 45 } elsif ($f eq "fstr") { 46 $try .= "\$x->accuracy($args[1]); \$x->precision($args[2]);"; 47 $try .= '$x->fstr();'; 48 } elsif ($f eq "parts") { 49 # ->bstr() to see if an object is returned 50 $try .= '($a,$b) = $x->parts(); $a = $a->bstr(); $b = $b->bstr();'; 51 $try .= '"$a $b";'; 52 } elsif ($f eq "exponent") { 53 # ->bstr() to see if an object is returned 54 $try .= '$x->exponent()->bstr();'; 55 } elsif ($f eq "mantissa") { 56 # ->bstr() to see if an object is returned 57 $try .= '$x->mantissa()->bstr();'; 58 } elsif ($f =~ /^(numify|length|as_number|as_hex|as_bin)$/) { 59 $try .= "\$x->$f();"; 60 # some unary ops (test the fxxx form, since that is done by AUTOLOAD) 61 } elsif ($f =~ /^f(nan|sstr|neg|floor|ceil|abs)$/) { 62 $try .= "\$x->f$1();"; 63 # some is_xxx test function 64 } elsif ($f =~ /^is_(zero|one|negative|positive|odd|even|nan|int)$/) { 65 $try .= "\$x->$f();"; 66 } elsif ($f eq "bpi") { 67 $try .= '$class->bpi($x);'; 68 } elsif ($f eq "finc") { 69 $try .= '++$x;'; 70 } elsif ($f eq "fdec") { 71 $try .= '--$x;'; 72 }elsif ($f eq "fround") { 73 $try .= "$setup; \$x->fround($args[1]);"; 74 } elsif ($f eq "ffround") { 75 $try .= "$setup; \$x->ffround($args[1]);"; 76 } elsif ($f eq "fsqrt") { 77 $try .= "$setup; \$x->fsqrt();"; 78 } elsif ($f eq "ffac") { 79 $try .= "$setup; \$x->ffac();"; 80 } elsif ($f eq "flog") { 81 if (defined $args[1] && $args[1] ne '') 82 { 83 $try .= "\$y = $class->new($args[1]);"; 84 $try .= "$setup; \$x->flog(\$y);"; 85 } 86 else 87 { 88 $try .= "$setup; \$x->flog();"; 89 } 90 } 91 else 92 { 93 $try .= "\$y = $class->new(\"$args[1]\");"; 94 95 if ($f eq "bgcd") 96 { 97 if (defined $args[2]) 98 { 99 $try .= " \$z = $class->new(\"$args[2]\"); "; 100 } 101 $try .= "$class\::bgcd(\$x, \$y"; 102 $try .= ", \$z" if (defined $args[2]); 103 $try .= " );"; 104 } 105 elsif ($f eq "blcm") 106 { 107 if (defined $args[2]) 108 { 109 $try .= " \$z = $class->new(\"$args[2]\"); "; 110 } 111 $try .= "$class\::blcm(\$x, \$y"; 112 $try .= ", \$z" if (defined $args[2]); 113 $try .= " );"; 114 } elsif ($f eq "fcmp") { 115 $try .= '$x->fcmp($y);'; 116 } elsif ($f eq "facmp") { 117 $try .= '$x->facmp($y);'; 118 } elsif ($f eq "fpow") { 119 $try .= '$x ** $y;'; 120 } elsif ($f eq "bnok") { 121 $try .= '$x->bnok($y);'; 122 } elsif ($f eq "bcos") { 123 $try .= '$x->bcos($y);'; 124 } elsif ($f eq "bsin") { 125 $try .= '$x->bsin($y);'; 126 } elsif ($f eq "batan") { 127 $try .= '$x->batan($y);'; 128 } elsif ($f eq "froot") { 129 $try .= "$setup; \$x->froot(\$y);"; 130 } elsif ($f eq "fadd") { 131 $try .= '$x + $y;'; 132 } elsif ($f eq "fsub") { 133 $try .= '$x - $y;'; 134 } elsif ($f eq "fmul") { 135 $try .= '$x * $y;'; 136 } elsif ($f eq "fdiv") { 137 $try .= "$setup; \$x / \$y;"; 138 } elsif ($f eq "fdiv-list") { 139 $try .= "$setup; join(',',\$x->fdiv(\$y));"; 140 } elsif ($f eq "frsft") { 141 $try .= '$x >> $y;'; 142 } elsif ($f eq "flsft") { 143 $try .= '$x << $y;'; 144 } elsif ($f eq "fmod") { 145 $try .= '$x % $y;'; 146 } else { 147 # Functions with three arguments 148 $try .= "\$z = $class->new(\"$args[2]\");"; 149 150 if( $f eq "bmodpow") { 151 $try .= '$x->bmodpow($y,$z);'; 152 } elsif ($f eq "bmuladd"){ 153 $try .= '$x->bmuladd($y,$z);'; 154 } elsif ($f eq "batan2"){ 155 $try .= '$x->batan2($y,$z);'; 156 } else { warn "Unknown op '$f'"; } 157 } 158 } 159 # print "# Trying: '$try'\n"; 160 $ans1 = eval $try; 161 print "# Error: $@\n" if $@; 162 if ($ans =~ m|^/(.*)$|) 163 { 164 my $pat = $1; 165 if ($ans1 =~ /$pat/) 166 { 167 ok (1,1); 168 } 169 else 170 { 171 print "# '$try' expected: /$pat/ got: '$ans1'\n" if !ok(1,0); 172 } 173 } 174 else 175 { 176 if ($ans eq "") 177 { 178 ok_undef ($ans1); 179 } 180 else 181 { 182 print "# Tried: '$try'\n" if !ok ($ans1, $ans); 183 if (ref($ans1) eq "$class") 184 { 185 # float numbers are normalized (for now), so mantissa shouldn't have 186 # trailing zeros 187 #print $ans1->_trailing_zeros(),"\n"; 188 print "# Has trailing zeros after '$try'\n" 189 if !ok ($CL->_zeros( $ans1->{_m}), 0); 190 } 191 } 192 } # end pattern or string 193 } 194 } # end while 195 196# check whether $class->new( Math::BigInt->new()) destroys it 197# ($y == 12 in this case) 198$x = Math::BigInt->new(1200); $y = $class->new($x); 199ok ($y,1200); ok ($x,1200); 200 201############################################################################### 202# Really huge, big, ultra-mega-biggy-monster exponents 203# Technically, the exponents should not be limited (they are BigInts), but 204# practically there are a few places were they are limited to a Perl scalar. 205# This is sometimes for speed, sometimes because otherwise the number wouldn't 206# fit into your memory (just think of 1e123456789012345678901234567890 + 1!) 207# anyway. We don't test everything here, but let's make sure it just basically 208# works. 209 210my $monster = '1e1234567890123456789012345678901234567890'; 211 212# new and exponent 213ok ($class->new($monster)->bsstr(), 214 '1e+1234567890123456789012345678901234567890'); 215ok ($class->new($monster)->exponent(), 216 '1234567890123456789012345678901234567890'); 217# cmp 218ok ($class->new($monster) > 0,1); 219 220# sub/mul 221ok ($class->new($monster)->bsub( $monster),0); 222ok ($class->new($monster)->bmul(2)->bsstr(), 223 '2e+1234567890123456789012345678901234567890'); 224 225# mantissa 226$monster = '1234567890123456789012345678901234567890e2'; 227ok ($class->new($monster)->mantissa(), 228 '123456789012345678901234567890123456789'); 229 230############################################################################### 231# zero,inf,one,nan 232 233$x = $class->new(2); $x->fzero(); ok_undef ($x->{_a}); ok_undef ($x->{_p}); 234$x = $class->new(2); $x->finf(); ok_undef ($x->{_a}); ok_undef ($x->{_p}); 235$x = $class->new(2); $x->fone(); ok_undef ($x->{_a}); ok_undef ($x->{_p}); 236$x = $class->new(2); $x->fnan(); ok_undef ($x->{_a}); ok_undef ($x->{_p}); 237 238############################################################################### 239# bone/binf etc as plain calls (Lite failed them) 240 241ok ($class->fzero(),0); 242ok ($class->fone(),1); 243ok ($class->fone('+'),1); 244ok ($class->fone('-'),-1); 245ok ($class->fnan(),'NaN'); 246ok ($class->finf(),'inf'); 247ok ($class->finf('+'),'inf'); 248ok ($class->finf('-'),'-inf'); 249ok ($class->finf('-inf'),'-inf'); 250 251$class->accuracy(undef); $class->precision(undef); # reset 252 253############################################################################### 254# bug in bsstr()/numify() showed up in after-rounding in bdiv() 255 256$x = $class->new('0.008'); $y = $class->new(2); 257$x->bdiv(3,$y); 258ok ($x,'0.0027'); 259 260############################################################################### 261# fsqrt() with set global A/P or A/P enabled on $x, also a test whether fsqrt() 262# correctly modifies $x 263 264 265$x = $class->new(12); $class->precision(-2); $x->fsqrt(); ok ($x,'3.46'); 266 267$class->precision(undef); 268$x = $class->new(12); $class->precision(0); $x->fsqrt(); ok ($x,'3'); 269 270$class->precision(-3); $x = $class->new(12); $x->fsqrt(); ok ($x,'3.464'); 271 272{ 273 no strict 'refs'; 274 # A and P set => NaN 275 ${${class}.'::accuracy'} = 4; $x = $class->new(12); 276 $x->fsqrt(3); ok ($x,'NaN'); 277 # supplied arg overrides set global 278 $class->precision(undef); $x = $class->new(12); $x->fsqrt(3); ok ($x,'3.46'); 279 $class->accuracy(undef); $class->precision(undef); # reset for further tests 280} 281 282############################################################################# 283# can we call objectify (broken until v1.52) 284 285{ 286 no strict; 287 $try = 288 '@args' . " = $class" . "::objectify(2,$class,4,5);".'join(" ",@args);'; 289 $ans = eval $try; 290 ok ($ans,"$class 4 5"); 291} 292 293############################################################################# 294# is_one('-') (broken until v1.64) 295 296ok ($class->new(-1)->is_one(),0); 297ok ($class->new(-1)->is_one('-'),1); 298 299############################################################################# 300# bug 1/0.5 leaving 2e-0 instead of 2e0 301 302ok ($class->new(1)->fdiv('0.5')->bsstr(),'2e+0'); 303 304############################################################################### 305# [perl #30609] bug with $x -= $x not being 0, but 2*$x 306 307$x = $class->new(3); $x -= $x; ok ($x, 0); 308$x = $class->new(-3); $x -= $x; ok ($x, 0); 309$x = $class->new(3); $x += $x; ok ($x, 6); 310$x = $class->new(-3); $x += $x; ok ($x, -6); 311 312$x = $class->new('NaN'); $x -= $x; ok ($x->is_nan(), 1); 313$x = $class->new('inf'); $x -= $x; ok ($x->is_nan(), 1); 314$x = $class->new('-inf'); $x -= $x; ok ($x->is_nan(), 1); 315 316$x = $class->new('NaN'); $x += $x; ok ($x->is_nan(), 1); 317$x = $class->new('inf'); $x += $x; ok ($x->is_inf(), 1); 318$x = $class->new('-inf'); $x += $x; ok ($x->is_inf('-'), 1); 319 320$x = $class->new('3.14'); $x -= $x; ok ($x, 0); 321$x = $class->new('-3.14'); $x -= $x; ok ($x, 0); 322$x = $class->new('3.14'); $x += $x; ok ($x, '6.28'); 323$x = $class->new('-3.14'); $x += $x; ok ($x, '-6.28'); 324 325$x = $class->new('3.14'); $x *= $x; ok ($x, '9.8596'); 326$x = $class->new('-3.14'); $x *= $x; ok ($x, '9.8596'); 327$x = $class->new('3.14'); $x /= $x; ok ($x, '1'); 328$x = $class->new('-3.14'); $x /= $x; ok ($x, '1'); 329$x = $class->new('3.14'); $x %= $x; ok ($x, '0'); 330$x = $class->new('-3.14'); $x %= $x; ok ($x, '0'); 331 332############################################################################### 333# the following two were reported by "kenny" via hotmail.com: 334 335#perl -MMath::BigFloat -wle 'print Math::BigFloat->new(0)->bpow(".1")' 336#Use of uninitialized value in numeric le (<=) at BigFloat.pm line 1851. 337 338$x = $class->new(0); $y = $class->new('0.1'); 339ok ($x ** $y, 0, 'no warnings and zero result'); 340 341#perl -MMath::BigFloat -lwe 'print Math::BigFloat->new(".222222222222222222222222222222222222222222")->bceil()' 342#Use of uninitialized value in numeric le (<=) at BigFloat.pm line 1851. 343 344$x = $class->new(".222222222222222222222222222222222222222222"); 345ok ($x->bceil(), 1, 'no warnings and one as result'); 346 347############################################################################### 348# test **=, <<=, >>= 349 350# ((2^148)-1)/17 351$x = $class->new(2); $x **= 148; $x++; $x->bdiv(17, 60)->bfloor(); $x->accuracy(undef); 352ok ($x,"20988936657440586486151264256610222593863921"); 353ok ($x->length(),length "20988936657440586486151264256610222593863921"); 354 355$x = $class->new('2'); 356my $y = $class->new('18'); 357ok ($x <<= $y, 2 << 18); 358ok ($x, 2 << 18); 359ok ($x >>= $y, 2); 360ok ($x, 2); 361 362$x = $class->new('2'); 363$y = $class->new('18.2'); 364$x <<= $y; # 2 * (2 ** 18.2); 365 366ok ($x->copy()->bfround(-9), '602248.763144685'); 367ok ($x >>= $y, 2); # 2 * (2 ** 18.2) / (2 ** 18.2) => 2 368ok ($x, 2); 369 3701; # all done 371 372############################################################################### 373# Perl 5.005 does not like ok ($x,undef) 374 375sub ok_undef 376 { 377 my $x = shift; 378 379 ok (1,1) and return if !defined $x; 380 ok ($x,'undef'); 381 } 382 383__DATA__ 384&bgcd 385inf:12:NaN 386-inf:12:NaN 38712:inf:NaN 38812:-inf:NaN 389inf:inf:NaN 390inf:-inf:NaN 391-inf:-inf:NaN 392abc:abc:NaN 393abc:+0:NaN 394+0:abc:NaN 395+0:+0:0 396+0:+1:1 397+1:+0:1 398+1:+1:1 399+2:+3:1 400+3:+2:1 401-3:+2:1 402-3:-2:1 403-144:-60:12 404144:-60:12 405144:60:12 406100:625:25 4074096:81:1 4081034:804:2 40927:90:56:1 41027:90:54:9 411&blcm 412abc:abc:NaN 413abc:+0:NaN 414+0:abc:NaN 415+0:+0:NaN 416+1:+0:0 417+0:+1:0 418+27:+90:270 419+1034:+804:415668 420$div_scale = 40; 421&bcos 4221.2:10:0.3623577545 4232.4:12:-0.737393715541 4240:10:1 4250:20:1 4261:10:0.5403023059 4271:12:0.540302305868 428&bsin 4291:10:0.8414709848 4300:10:0 4310:20:0 4322.1:12:0.863209366649 4331.2:13:0.9320390859672 4340.2:13:0.1986693307951 4353.2:12:-0.0583741434276 436&batan 437NaN:10:NaN 438inf:14:1.5707963267949 439-inf:14:-1.5707963267949 4400.2:13:0.1973955598499 4410.2:14:0.19739555984988 4420:10:0 4431:14:0.78539816339744 444-1:14:-0.78539816339744 445# test an argument X > 1 4462:14:1.1071487177941 447&batan2 448NaN:1:10:NaN 449NaN:NaN:10:NaN 4501:NaN:10:NaN 451inf:1:14:1.5707963267949 452-inf:1:14:-1.5707963267949 4530:-inf:14:3.1415926535898 454-1:-inf:14:-3.1415926535898 4551:-inf:14:3.1415926535898 4560:inf:14:0 457inf:-inf:14:2.3561944901923 458-inf:-inf:14:-2.3561944901923 459inf:+inf:14:0.7853981633974 460-inf:+inf:14:-0.7853981633974 4611:5:13:0.1973955598499 4621:5:14:0.19739555984988 4630:0:10:0 4640:1:14:0 4650:2:14:0 4661:0:14:1.5707963267949 4675:0:14:1.5707963267949 468-1:0:11:-1.5707963268 469-2:0:77:-1.5707963267948966192313216916397514420985846996875529104874722961539082031431 4702:0:77:1.5707963267948966192313216916397514420985846996875529104874722961539082031431 471-1:5:14:-0.19739555984988 4721:5:14:0.19739555984988 473-1:8:14:-0.12435499454676 4741:8:14:0.12435499454676 475-1:1:14:-0.78539816339744 476# test an argument X > 1 and one X < 1 4771:2:24:0.463647609000806116214256 4782:1:14:1.1071487177941 479-2:1:14:-1.1071487177941 480&bpi 481150:3.14159265358979323846264338327950288419716939937510582097494459230781640628620899862803482534211706798214808651328230664709384460955058223172535940813 48277:3.1415926535897932384626433832795028841971693993751058209749445923078164062862 483+0:3.141592653589793238462643383279502884197 48411:3.1415926536 485&bnok 486+inf:10:inf 487NaN:NaN:NaN 488NaN:1:NaN 4891:NaN:NaN 4901:1:1 491# k > n 4921:2:0 4932:3:0 494# k < 0 4951:-2:0 496# 7 over 3 = 35 4977:3:35 4987:6:1 499100:90:17310309456440 500&flog 5010::NaN 502-1::NaN 503-2::NaN 504# base > 0, base != 1 5052:-1:NaN 5062:0:NaN 5072:1:NaN 508# log(1) is always 1, regardless of $base 5091::0 5101:1:0 5111:2:0 5122::0.6931471805599453094172321214581765680755 5132.718281828::0.9999999998311266953289851340574956564911 514$div_scale = 20; 5152.718281828::0.99999999983112669533 516$div_scale = 15; 517123::4.81218435537242 51810::2.30258509299405 5191000::6.90775527898214 520100::4.60517018598809 5212::0.693147180559945 5223.1415::1.14470039286086 52312345::9.42100640177928 5240.001::-6.90775527898214 525# bug until v1.71: 52610:10:1 527100:100:1 528# reset for further tests 529$div_scale = 40; 5301::0 531&frsft 532NaNfrsft:2:NaN 5330:2:0 5341:1:0.5 5352:1:1 5364:1:2 537123:1:61.5 53832:3:4 539&flsft 540NaNflsft:0:NaN 5412:1:4 5424:3:32 5435:3:40 5441:2:4 5450:5:0 546&fnorm 5471:1 548-0:0 549fnormNaN:NaN 550+inf:inf 551-inf:-inf 552123:123 553-123.4567:-123.4567 554# invalid inputs 5551__2:NaN 5561E1__2:NaN 55711__2E2:NaN 558.2E-3.:NaN 5591e3e4:NaN 560# strange, but valid 561.2E2:20 5621.E3:1000 563# some inputs that result in zero 5640e0:0 565+0e0:0 566+0e+0:0 567-0e+0:0 5680e-0:0 569-0e-0:0 570+0e-0:0 571000:0 57200e2:0 57300e02:0 574000e002:0 575000e1230:0 57600e-3:0 57700e+3:0 57800e-03:0 57900e+03:0 580-000:0 581-00e2:0 582-00e02:0 583-000e002:0 584-000e1230:0 585-00e-3:0 586-00e+3:0 587-00e-03:0 588-00e+03:0 589&as_number 5900:0 5911:1 5921.2:1 5932.345:2 594-2:-2 595-123.456:-123 596-200:-200 597# test for bug in brsft() not handling cases that return 0 5980.000641:0 5990.0006412:0 6000.00064123:0 6010.000641234:0 6020.0006412345:0 6030.00064123456:0 6040.000641234567:0 6050.0006412345678:0 6060.00064123456789:0 6070.1:0 6080.01:0 6090.001:0 6100.0001:0 6110.00001:0 6120.000001:0 6130.0000001:0 6140.00000001:0 6150.000000001:0 6160.0000000001:0 6170.00000000001:0 6180.12345:0 6190.123456:0 6200.1234567:0 6210.12345678:0 6220.123456789:0 623&finf 6241:+:inf 6252:-:-inf 6263:abc:inf 627&as_hex 628+inf:inf 629-inf:-inf 630hexNaN:NaN 6310:0x0 6325:0x5 633-5:-0x5 634&as_bin 635+inf:inf 636-inf:-inf 637hexNaN:NaN 6380:0b0 6395:0b101 640-5:-0b101 641&numify 642# uses bsstr() so 5 => 5e+0 to be compatible w/ Perls output 6430:0e+1 644+1:1e+0 6451234:1234e+0 646NaN:NaN 647+inf:inf 648-inf:-inf 649-5:-5e+0 650100:1e+2 651-100:-1e+2 652&fnan 653abc:NaN 6542:NaN 655-2:NaN 6560:NaN 657&fone 6582:+:1 659-2:-:-1 660-2:+:1 6612:-:-1 6620::1 663-2::1 664abc::1 6652:abc:1 666&fsstr 667+inf:inf 668-inf:-inf 669abcfsstr:NaN 670-abcfsstr:NaN 6711234.567:1234567e-3 672123:123e+0 673-5:-5e+0 674-100:-1e+2 675&fstr 676+inf:::inf 677-inf:::-inf 678abcfstr:::NaN 6791234.567:9::1234.56700 6801234.567::-6:1234.567000 68112345:5::12345 6820.001234:6::0.00123400 6830.001234::-8:0.00123400 6840:4::0 6850::-4:0.0000 686&fnorm 687inf:inf 688+inf:inf 689-inf:-inf 690+infinity:NaN 691+-inf:NaN 692abc:NaN 693 1 a:NaN 6941bcd2:NaN 69511111b:NaN 696+1z:NaN 697-1z:NaN 6980e999:0 6990e-999:0 700-0e999:0 701-0e-999:0 7020:0 703+0:0 704+00:0 705+0_0_0:0 706000000_0000000_00000:0 707-0:0 708-0000:0 709+1:1 710+01:1 711+001:1 712+00000100000:100000 713123456789:123456789 714-1:-1 715-01:-1 716-001:-1 717-123456789:-123456789 718-00000100000:-100000 719123.456a:NaN 720123.456:123.456 7210.01:0.01 722.002:0.002 723+.2:0.2 724-0.0003:-0.0003 725-.0000000004:-0.0000000004 726123456E2:12345600 727123456E-2:1234.56 728-123456E2:-12345600 729-123456E-2:-1234.56 7301e1:10 7312e-11:0.00000000002 732# excercise _split 733 .02e-1:0.002 734 000001:1 735 -00001:-1 736 -1:-1 737 000.01:0.01 738 -000.0023:-0.0023 739 1.1e1:11 740-3e111:-3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 741-4e-1111:-0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004 742&fpow 743NaN:1:NaN 7441:NaN:NaN 745NaN:-1:NaN 746-1:NaN:NaN 747NaN:-21:NaN 748-21:NaN:NaN 749NaN:21:NaN 75021:NaN:NaN 7510:0:1 7520:1:0 7530:9:0 7540:-2:inf 7552:2:4 7561:2:1 7571:3:1 758-1:2:1 759-1:3:-1 760123.456:2:15241.383936 7612:-2:0.25 7622:-3:0.125 763128:-2:0.00006103515625 764abc:123.456:NaN 765123.456:abc:NaN 766+inf:123.45:inf 767-inf:123.45:-inf 768+inf:-123.45:inf 769-inf:-123.45:-inf 770-2:2:4 771-2:3:-8 772-2:4:16 773-2:5:-32 774-3:2:9 775-3:3:-27 776-3:4:81 777-3:5:-243 778# 2 ** 0.5 == sqrt(2) 779# 1.41..7 and not 1.4170 since fallback (bsqrt(9) is '3', not 3.0...0) 7802:0.5:1.41421356237309504880168872420969807857 781#2:0.2:1.148698354997035006798626946777927589444 782#6:1.5:14.6969384566990685891837044482353483518 783$div_scale = 20; 784#62.5:12.5:26447206647554886213592.3959144 785$div_scale = 40; 786&fneg 787fnegNaN:NaN 788+inf:-inf 789-inf:inf 790+0:0 791+1:-1 792-1:1 793+123456789:-123456789 794-123456789:123456789 795+123.456789:-123.456789 796-123456.789:123456.789 797&fabs 798fabsNaN:NaN 799+inf:inf 800-inf:inf 801+0:0 802+1:1 803-1:1 804+123456789:123456789 805-123456789:123456789 806+123.456789:123.456789 807-123456.789:123456.789 808&fround 809$round_mode = "trunc" 810+inf:5:inf 811-inf:5:-inf 8120:5:0 813NaNfround:5:NaN 814+10123456789:5:10123000000 815-10123456789:5:-10123000000 816+10123456789.123:5:10123000000 817-10123456789.123:5:-10123000000 818+10123456789:9:10123456700 819-10123456789:9:-10123456700 820+101234500:6:101234000 821-101234500:6:-101234000 822$round_mode = "zero" 823+20123456789:5:20123000000 824-20123456789:5:-20123000000 825+20123456789.123:5:20123000000 826-20123456789.123:5:-20123000000 827+20123456789:9:20123456800 828-20123456789:9:-20123456800 829+201234500:6:201234000 830-201234500:6:-201234000 831$round_mode = "+inf" 832+30123456789:5:30123000000 833-30123456789:5:-30123000000 834+30123456789.123:5:30123000000 835-30123456789.123:5:-30123000000 836+30123456789:9:30123456800 837-30123456789:9:-30123456800 838+301234500:6:301235000 839-301234500:6:-301234000 840$round_mode = "-inf" 841+40123456789:5:40123000000 842-40123456789:5:-40123000000 843+40123456789.123:5:40123000000 844-40123456789.123:5:-40123000000 845+40123456789:9:40123456800 846-40123456789:9:-40123456800 847+401234500:6:401234000 848-401234500:6:-401235000 849$round_mode = "odd" 850+50123456789:5:50123000000 851-50123456789:5:-50123000000 852+50123456789.123:5:50123000000 853-50123456789.123:5:-50123000000 854+50123456789:9:50123456800 855-50123456789:9:-50123456800 856+501234500:6:501235000 857-501234500:6:-501235000 858$round_mode = "even" 859+60123456789:5:60123000000 860-60123456789:5:-60123000000 861+60123456789:9:60123456800 862-60123456789:9:-60123456800 863+601234500:6:601234000 864-601234500:6:-601234000 865+60123456789.0123:5:60123000000 866-60123456789.0123:5:-60123000000 867$round_mode = "common" 868+60123456789:5:60123000000 869-60123456789:5:-60123000000 870+60123456789:6:60123500000 871-60123456789:6:-60123500000 872+60123456789:9:60123456800 873-60123456789:9:-60123456800 874+601234500:6:601235000 875-601234500:6:-601235000 876+601234400:6:601234000 877-601234400:6:-601234000 878+601234600:6:601235000 879-601234600:6:-601235000 880+601234300:6:601234000 881+60123456789.0123:5:60123000000 882-60123456789.0123:5:-60123000000 883&ffround 884$round_mode = "trunc" 885+inf:5:inf 886-inf:5:-inf 8870:5:0 888NaNffround:5:NaN 889+1.23:-1:1.2 890+1.234:-1:1.2 891+1.2345:-1:1.2 892+1.23:-2:1.23 893+1.234:-2:1.23 894+1.2345:-2:1.23 895+1.23:-3:1.230 896+1.234:-3:1.234 897+1.2345:-3:1.234 898-1.23:-1:-1.2 899+1.27:-1:1.2 900-1.27:-1:-1.2 901+1.25:-1:1.2 902-1.25:-1:-1.2 903+1.35:-1:1.3 904-1.35:-1:-1.3 905-0.0061234567890:-1:0.0 906-0.0061:-1:0.0 907-0.00612:-1:0.0 908-0.00612:-2:0.00 909-0.006:-1:0.0 910-0.006:-2:0.00 911-0.0006:-2:0.00 912-0.0006:-3:0.000 913-0.0065:-3:/-0\.006|-6e-03 914-0.0065:-4:/-0\.006(?:5|49{5}\d+)|-6\.5e-03 915-0.0065:-5:/-0\.006(?:5|49{5}\d+)|-6\.5e-03 9160.05:0:0 9170.5:0:0 9180.51:0:0 9190.41:0:0 920$round_mode = "zero" 921+2.23:-1:/2.2(?:0{5}\d+)? 922-2.23:-1:/-2.2(?:0{5}\d+)? 923+2.27:-1:/2.(?:3|29{5}\d+) 924-2.27:-1:/-2.(?:3|29{5}\d+) 925+2.25:-1:/2.2(?:0{5}\d+)? 926-2.25:-1:/-2.2(?:0{5}\d+)? 927+2.35:-1:/2.(?:3|29{5}\d+) 928-2.35:-1:/-2.(?:3|29{5}\d+) 929-0.0065:-1:0.0 930-0.0065:-2:/-0\.01|-1e-02 931-0.0065:-3:/-0\.006|-6e-03 932-0.0065:-4:/-0\.006(?:5|49{5}\d+)|-6\.5e-03 933-0.0065:-5:/-0\.006(?:5|49{5}\d+)|-6\.5e-03 9340.05:0:0 9350.5:0:0 9360.51:0:1 9370.41:0:0 938$round_mode = "+inf" 939+3.23:-1:/3.2(?:0{5}\d+)? 940-3.23:-1:/-3.2(?:0{5}\d+)? 941+3.27:-1:/3.(?:3|29{5}\d+) 942-3.27:-1:/-3.(?:3|29{5}\d+) 943+3.25:-1:/3.(?:3|29{5}\d+) 944-3.25:-1:/-3.2(?:0{5}\d+)? 945+3.35:-1:/3.(?:4|39{5}\d+) 946-3.35:-1:/-3.(?:3|29{5}\d+) 947-0.0065:-1:0.0 948-0.0065:-2:/-0\.01|-1e-02 949-0.0065:-3:/-0\.006|-6e-03 950-0.0065:-4:/-0\.006(?:5|49{5}\d+)|-6\.5e-03 951-0.0065:-5:/-0\.006(?:5|49{5}\d+)|-6\.5e-03 9520.05:0:0 9530.5:0:1 9540.51:0:1 9550.41:0:0 956$round_mode = "-inf" 957+4.23:-1:/4.2(?:0{5}\d+)? 958-4.23:-1:/-4.2(?:0{5}\d+)? 959+4.27:-1:/4.(?:3|29{5}\d+) 960-4.27:-1:/-4.(?:3|29{5}\d+) 961+4.25:-1:/4.2(?:0{5}\d+)? 962-4.25:-1:/-4.(?:3|29{5}\d+) 963+4.35:-1:/4.(?:3|29{5}\d+) 964-4.35:-1:/-4.(?:4|39{5}\d+) 965-0.0065:-1:0.0 966-0.0065:-2:/-0\.01|-1e-02 967-0.0065:-3:/-0\.007|-7e-03 968-0.0065:-4:/-0\.006(?:5|49{5}\d+)|-6\.5e-03 969-0.0065:-5:/-0\.006(?:5|49{5}\d+)|-6\.5e-03 9700.05:0:0 9710.5:0:0 9720.51:0:1 9730.41:0:0 974$round_mode = "odd" 975+5.23:-1:/5.2(?:0{5}\d+)? 976-5.23:-1:/-5.2(?:0{5}\d+)? 977+5.27:-1:/5.(?:3|29{5}\d+) 978-5.27:-1:/-5.(?:3|29{5}\d+) 979+5.25:-1:/5.(?:3|29{5}\d+) 980-5.25:-1:/-5.(?:3|29{5}\d+) 981+5.35:-1:/5.(?:3|29{5}\d+) 982-5.35:-1:/-5.(?:3|29{5}\d+) 983-0.0065:-1:0.0 984-0.0065:-2:/-0\.01|-1e-02 985-0.0065:-3:/-0\.007|-7e-03 986-0.0065:-4:/-0\.006(?:5|49{5}\d+)|-6\.5e-03 987-0.0065:-5:/-0\.006(?:5|49{5}\d+)|-6\.5e-03 9880.05:0:0 9890.5:0:1 9900.51:0:1 9910.41:0:0 992$round_mode = "even" 993+6.23:-1:/6.2(?:0{5}\d+)? 994-6.23:-1:/-6.2(?:0{5}\d+)? 995+6.27:-1:/6.(?:3|29{5}\d+) 996-6.27:-1:/-6.(?:3|29{5}\d+) 997+6.25:-1:/6.(?:2(?:0{5}\d+)?|29{5}\d+) 998-6.25:-1:/-6.(?:2(?:0{5}\d+)?|29{5}\d+) 999+6.35:-1:/6.(?:4|39{5}\d+|29{8}\d+) 1000-6.35:-1:/-6.(?:4|39{5}\d+|29{8}\d+) 1001-0.0065:-1:0.0 1002-0.0065:-2:/-0\.01|-1e-02 1003-0.0065:-3:/-0\.006|-7e-03 1004-0.0065:-4:/-0\.006(?:5|49{5}\d+)|-6\.5e-03 1005-0.0065:-5:/-0\.006(?:5|49{5}\d+)|-6\.5e-03 10060.05:0:0 10070.5:0:0 10080.51:0:1 10090.41:0:0 10100.01234567:-3:0.012 10110.01234567:-4:0.0123 10120.01234567:-5:0.01235 10130.01234567:-6:0.012346 10140.01234567:-7:0.0123457 10150.01234567:-8:0.01234567 10160.01234567:-9:0.012345670 10170.01234567:-12:0.012345670000 1018&fcmp 1019fcmpNaN:fcmpNaN: 1020fcmpNaN:+0: 1021+0:fcmpNaN: 1022+0:+0:0 1023-1:+0:-1 1024+0:-1:1 1025+1:+0:1 1026+0:+1:-1 1027-1:+1:-1 1028+1:-1:1 1029-1:-1:0 1030+1:+1:0 1031-1.1:0:-1 1032+0:-1.1:1 1033+1.1:+0:1 1034+0:+1.1:-1 1035+123:+123:0 1036+123:+12:1 1037+12:+123:-1 1038-123:-123:0 1039-123:-12:-1 1040-12:-123:1 1041+123:+124:-1 1042+124:+123:1 1043-123:-124:1 1044-124:-123:-1 10450:0.01:-1 10460:0.0001:-1 10470:-0.0001:1 10480:-0.1:1 10490.1:0:1 10500.00001:0:1 1051-0.0001:0:-1 1052-0.1:0:-1 10530:0.0001234:-1 10540:-0.0001234:1 10550.0001234:0:1 1056-0.0001234:0:-1 10570.0001:0.0005:-1 10580.0005:0.0001:1 10590.005:0.0001:1 10600.001:0.0005:1 10610.000001:0.0005:-1 10620.00000123:0.0005:-1 10630.00512:0.0001:1 10640.005:0.000112:1 10650.00123:0.0005:1 10661.5:2:-1 10672:1.5:1 10681.54321:234:-1 1069234:1.54321:1 1070# infinity 1071-inf:5432112345:-1 1072+inf:5432112345:1 1073-inf:-5432112345:-1 1074+inf:-5432112345:1 1075-inf:54321.12345:-1 1076+inf:54321.12345:1 1077-inf:-54321.12345:-1 1078+inf:-54321.12345:1 1079+inf:+inf:0 1080-inf:-inf:0 1081+inf:-inf:1 1082-inf:+inf:-1 1083# return undef 1084+inf:NaN: 1085NaN:inf: 1086-inf:NaN: 1087NaN:-inf: 1088&facmp 1089fcmpNaN:fcmpNaN: 1090fcmpNaN:+0: 1091+0:fcmpNaN: 1092+0:+0:0 1093-1:+0:1 1094+0:-1:-1 1095+1:+0:1 1096+0:+1:-1 1097-1:+1:0 1098+1:-1:0 1099-1:-1:0 1100+1:+1:0 1101-1.1:0:1 1102+0:-1.1:-1 1103+1.1:+0:1 1104+0:+1.1:-1 1105+123:+123:0 1106+123:+12:1 1107+12:+123:-1 1108-123:-123:0 1109-123:-12:1 1110-12:-123:-1 1111+123:+124:-1 1112+124:+123:1 1113-123:-124:-1 1114-124:-123:1 11150:0.01:-1 11160:0.0001:-1 11170:-0.0001:-1 11180:-0.1:-1 11190.1:0:1 11200.00001:0:1 1121-0.0001:0:1 1122-0.1:0:1 11230:0.0001234:-1 11240:-0.0001234:-1 11250.0001234:0:1 1126-0.0001234:0:1 11270.0001:0.0005:-1 11280.0005:0.0001:1 11290.005:0.0001:1 11300.001:0.0005:1 11310.000001:0.0005:-1 11320.00000123:0.0005:-1 11330.00512:0.0001:1 11340.005:0.000112:1 11350.00123:0.0005:1 11361.5:2:-1 11372:1.5:1 11381.54321:234:-1 1139234:1.54321:1 1140# infinity 1141-inf:5432112345:1 1142+inf:5432112345:1 1143-inf:-5432112345:1 1144+inf:-5432112345:1 1145-inf:54321.12345:1 1146+inf:54321.12345:1 1147-inf:-54321.12345:1 1148+inf:-54321.12345:1 1149+inf:+inf:0 1150-inf:-inf:0 1151+inf:-inf:0 1152-inf:+inf:0 11535:inf:-1 1154-1:inf:-1 11555:-inf:-1 1156-1:-inf:-1 1157# return undef 1158+inf:facmpNaN: 1159facmpNaN:inf: 1160-inf:facmpNaN: 1161facmpNaN:-inf: 1162&fdec 1163fdecNaN:NaN 1164+inf:inf 1165-inf:-inf 1166+0:-1 1167+1:0 1168-1:-2 11691.23:0.23 1170-1.23:-2.23 1171100:99 1172101:100 1173-100:-101 1174-99:-100 1175-98:-99 117699:98 1177&finc 1178fincNaN:NaN 1179+inf:inf 1180-inf:-inf 1181+0:1 1182+1:2 1183-1:0 11841.23:2.23 1185-1.23:-0.23 1186100:101 1187-100:-99 1188-99:-98 1189-101:-100 119099:100 1191&fadd 1192abc:abc:NaN 1193abc:+0:NaN 1194+0:abc:NaN 1195+inf:-inf:NaN 1196-inf:+inf:NaN 1197+inf:+inf:inf 1198-inf:-inf:-inf 1199baddNaN:+inf:NaN 1200baddNaN:+inf:NaN 1201+inf:baddNaN:NaN 1202-inf:baddNaN:NaN 1203+0:+0:0 1204+1:+0:1 1205+0:+1:1 1206+1:+1:2 1207-1:+0:-1 1208+0:-1:-1 1209-1:-1:-2 1210-1:+1:0 1211+1:-1:0 1212+9:+1:10 1213+99:+1:100 1214+999:+1:1000 1215+9999:+1:10000 1216+99999:+1:100000 1217+999999:+1:1000000 1218+9999999:+1:10000000 1219+99999999:+1:100000000 1220+999999999:+1:1000000000 1221+9999999999:+1:10000000000 1222+99999999999:+1:100000000000 1223+10:-1:9 1224+100:-1:99 1225+1000:-1:999 1226+10000:-1:9999 1227+100000:-1:99999 1228+1000000:-1:999999 1229+10000000:-1:9999999 1230+100000000:-1:99999999 1231+1000000000:-1:999999999 1232+10000000000:-1:9999999999 1233+123456789:+987654321:1111111110 1234-123456789:+987654321:864197532 1235-123456789:-987654321:-1111111110 1236+123456789:-987654321:-864197532 12370.001234:0.0001234:0.0013574 1238&fsub 1239abc:abc:NaN 1240abc:+0:NaN 1241+0:abc:NaN 1242+inf:-inf:inf 1243-inf:+inf:-inf 1244+inf:+inf:NaN 1245-inf:-inf:NaN 1246baddNaN:+inf:NaN 1247baddNaN:+inf:NaN 1248+inf:baddNaN:NaN 1249-inf:baddNaN:NaN 1250+0:+0:0 1251+1:+0:1 1252+0:+1:-1 1253+1:+1:0 1254-1:+0:-1 1255+0:-1:1 1256-1:-1:0 1257-1:+1:-2 1258+1:-1:2 1259+9:+1:8 1260+99:+1:98 1261+999:+1:998 1262+9999:+1:9998 1263+99999:+1:99998 1264+999999:+1:999998 1265+9999999:+1:9999998 1266+99999999:+1:99999998 1267+999999999:+1:999999998 1268+9999999999:+1:9999999998 1269+99999999999:+1:99999999998 1270+10:-1:11 1271+100:-1:101 1272+1000:-1:1001 1273+10000:-1:10001 1274+100000:-1:100001 1275+1000000:-1:1000001 1276+10000000:-1:10000001 1277+100000000:-1:100000001 1278+1000000000:-1:1000000001 1279+10000000000:-1:10000000001 1280+123456789:+987654321:-864197532 1281-123456789:+987654321:-1111111110 1282-123456789:-987654321:864197532 1283+123456789:-987654321:1111111110 1284&bmuladd 1285abc:abc:0:NaN 1286abc:+0:0:NaN 1287+0:abc:0:NaN 1288+0:0:abc:NaN 1289NaNmul:+inf:0:NaN 1290NaNmul:-inf:0:NaN 1291-inf:NaNmul:0:NaN 1292+inf:NaNmul:0:NaN 1293+inf:+inf:0:inf 1294+inf:-inf:0:-inf 1295-inf:+inf:0:-inf 1296-inf:-inf:0:inf 1297+0:+0:0:0 1298+0:+1:0:0 1299+1:+0:0:0 1300+0:-1:0:0 1301-1:+0:0:0 1302123456789123456789:0:0:0 13030:123456789123456789:0:0 1304-1:-1:0:1 1305-1:-1:0:1 1306-1:+1:0:-1 1307+1:-1:0:-1 1308+1:+1:0:1 1309+2:+3:0:6 1310-2:+3:0:-6 1311+2:-3:0:-6 1312-2:-3:0:6 1313111:111:0:12321 131410101:10101:0:102030201 13151001001:1001001:0:1002003002001 1316100010001:100010001:0:10002000300020001 131710000100001:10000100001:0:100002000030000200001 131811111111111:9:0:99999999999 131922222222222:9:0:199999999998 132033333333333:9:0:299999999997 132144444444444:9:0:399999999996 132255555555555:9:0:499999999995 132366666666666:9:0:599999999994 132477777777777:9:0:699999999993 132588888888888:9:0:799999999992 132699999999999:9:0:899999999991 132711111111111:9:1:100000000000 132822222222222:9:1:199999999999 132933333333333:9:1:299999999998 133044444444444:9:1:399999999997 133155555555555:9:1:499999999996 133266666666666:9:1:599999999995 133377777777777:9:1:699999999994 133488888888888:9:1:799999999993 133599999999999:9:1:899999999992 1336-3:-4:-5:7 13373:-4:-5:-17 1338-3:4:-5:-17 13393:4:-5:7 1340-3:4:5:-7 13413:-4:5:-7 13429999999999999999999:10000000000000000000:1234567890:99999999999999999990000000001234567890 13433.2:5.7:8.9:27.14 1344-3.2:5.197:6.05:-10.5804 1345&bmodpow 13463:4:8:1 13473:4:7:4 13483:4:7:4 134977777:777:123456789:99995084 13503.2:6.2:5.2:2.970579856718063040273642739529400818 1351&fmul 1352abc:abc:NaN 1353abc:+0:NaN 1354+0:abc:NaN 1355+inf:NaNmul:NaN 1356+inf:NaNmul:NaN 1357NaNmul:+inf:NaN 1358NaNmul:-inf:NaN 1359+inf:+inf:inf 1360+inf:-inf:-inf 1361+inf:-inf:-inf 1362+inf:+inf:inf 1363+inf:123.34:inf 1364+inf:-123.34:-inf 1365-inf:123.34:-inf 1366-inf:-123.34:inf 1367123.34:+inf:inf 1368-123.34:+inf:-inf 1369123.34:-inf:-inf 1370-123.34:-inf:inf 1371+0:+0:0 1372+0:+1:0 1373+1:+0:0 1374+0:-1:0 1375-1:+0:0 1376+123456789123456789:+0:0 1377+0:+123456789123456789:0 1378-1:-1:1 1379-1:+1:-1 1380+1:-1:-1 1381+1:+1:1 1382+2:+3:6 1383-2:+3:-6 1384+2:-3:-6 1385-2:-3:6 1386+111:+111:12321 1387+10101:+10101:102030201 1388+1001001:+1001001:1002003002001 1389+100010001:+100010001:10002000300020001 1390+10000100001:+10000100001:100002000030000200001 1391+11111111111:+9:99999999999 1392+22222222222:+9:199999999998 1393+33333333333:+9:299999999997 1394+44444444444:+9:399999999996 1395+55555555555:+9:499999999995 1396+66666666666:+9:599999999994 1397+77777777777:+9:699999999993 1398+88888888888:+9:799999999992 1399+99999999999:+9:899999999991 14006:120:720 140110:10000:100000 1402&fdiv-list 14030:0:NaN,NaN 14040:1:0,0 14059:4:2.25,1 14069:5:1.8,4 1407# bug in v1.74 with bdiv in list context, when $y is 1 or -1 14082.1:-1:-2.1,0 14092.1:1:2.1,0 1410-2.1:-1:2.1,0 1411-2.1:1:-2.1,0 1412&fdiv 1413$div_scale = 40; $round_mode = 'even' 1414abc:abc:NaN 1415abc:+1:abc:NaN 1416+1:abc:NaN 1417-1:abc:NaN 14180:abc:NaN 1419+0:+0:NaN 1420+0:+1:0 1421+1:+0:inf 1422+3214:+0:inf 1423+0:-1:0 1424-1:+0:-inf 1425-3214:+0:-inf 1426+1:+1:1 1427-1:-1:1 1428+1:-1:-1 1429-1:+1:-1 1430+1:+2:0.5 1431+2:+1:2 1432123:+inf:0 1433123:-inf:0 1434+10:+5:2 1435+100:+4:25 1436+1000:+8:125 1437+10000:+16:625 1438+10000:-16:-625 1439+999999999999:+9:111111111111 1440+999999999999:+99:10101010101 1441+999999999999:+999:1001001001 1442+999999999999:+9999:100010001 1443+999999999999999:+99999:10000100001 1444+1000000000:+9:111111111.1111111111111111111111111111111 1445+2000000000:+9:222222222.2222222222222222222222222222222 1446+3000000000:+9:333333333.3333333333333333333333333333333 1447+4000000000:+9:444444444.4444444444444444444444444444444 1448+5000000000:+9:555555555.5555555555555555555555555555556 1449+6000000000:+9:666666666.6666666666666666666666666666667 1450+7000000000:+9:777777777.7777777777777777777777777777778 1451+8000000000:+9:888888888.8888888888888888888888888888889 1452+9000000000:+9:1000000000 1453+35500000:+113:314159.2920353982300884955752212389380531 1454+71000000:+226:314159.2920353982300884955752212389380531 1455+106500000:+339:314159.2920353982300884955752212389380531 1456+1000000000:+3:333333333.3333333333333333333333333333333 14572:25.024996000799840031993601279744051189762:0.07992009269196593320152084692285869265447 1458123456:1:123456 1459$div_scale = 20 1460+1000000000:+9:111111111.11111111111 1461+2000000000:+9:222222222.22222222222 1462+3000000000:+9:333333333.33333333333 1463+4000000000:+9:444444444.44444444444 1464+5000000000:+9:555555555.55555555556 1465+6000000000:+9:666666666.66666666667 1466+7000000000:+9:777777777.77777777778 1467+8000000000:+9:888888888.88888888889 1468+9000000000:+9:1000000000 14691:10:0.1 14701:100:0.01 14711:1000:0.001 14721:10000:0.0001 14731:504:0.001984126984126984127 14742:1.987654321:1.0062111801179738436 1475123456789.123456789123456789123456789:1:123456789.12345678912 1476# the next two cases are the "old" behaviour, but are now (>v0.01) different 1477#+35500000:+113:314159.292035398230088 1478#+71000000:+226:314159.292035398230088 1479+35500000:+113:314159.29203539823009 1480+71000000:+226:314159.29203539823009 1481+106500000:+339:314159.29203539823009 1482+1000000000:+3:333333333.33333333333 1483$div_scale = 1 1484# round to accuracy 1 after bdiv 1485+124:+3:40 1486123456789.1234:1:100000000 1487# reset scale for further tests 1488$div_scale = 40 1489&fmod 1490+9:4:1 1491+9:5:4 1492+9000:56:40 1493+56:9000:56 1494# inf handling, see table in doc 14950:inf:0 14960:-inf:0 14975:inf:5 14985:-inf:5 1499-5:inf:-5 1500-5:-inf:-5 1501inf:5:0 1502-inf:5:0 1503inf:-5:0 1504-inf:-5:0 15055:5:0 1506-5:-5:0 1507inf:inf:NaN 1508-inf:-inf:NaN 1509-inf:inf:NaN 1510inf:-inf:NaN 15118:0:8 1512inf:0:inf 1513# exceptions to reminder rule 1514-inf:0:-inf 1515-8:0:-8 15160:0:NaN 1517abc:abc:NaN 1518abc:1:abc:NaN 15191:abc:NaN 15200:0:NaN 15210:1:0 15221:0:1 15230:-1:0 1524-1:0:-1 15251:1:0 1526-1:-1:0 15271:-1:0 1528-1:1:0 15291:2:1 15302:1:0 15311000000000:9:1 15322000000000:9:2 15333000000000:9:3 15344000000000:9:4 15355000000000:9:5 15366000000000:9:6 15377000000000:9:7 15388000000000:9:8 15399000000000:9:0 154035500000:113:33 154171000000:226:66 1542106500000:339:99 15431000000000:3:1 154410:5:0 1545100:4:0 15461000:8:0 154710000:16:0 1548999999999999:9:0 1549999999999999:99:0 1550999999999999:999:0 1551999999999999:9999:0 1552999999999999999:99999:0 1553-9:+5:1 1554+9:-5:-1 1555-9:-5:-4 1556-5:3:1 1557-2:3:1 15584:3:1 15591:3:1 1560-5:-3:-2 1561-2:-3:-2 15624:-3:-2 15631:-3:-2 15644095:4095:0 1565100041000510123:3:0 1566152403346:12345:4321 156787654321:87654321:0 1568# now some floating point tests 1569123:2.5:0.5 15701230:2.5:0 1571123.4:2.5:0.9 1572123e1:25:5 1573-2.1:1:0.9 15742.1:1:0.1 1575-2.1:-1:-0.1 15762.1:-1:-0.9 1577-3:1:0 15783:1:0 1579-3:-1:0 15803:-1:0 1581&ffac 1582Nanfac:NaN 1583-1:NaN 1584+inf:inf 1585-inf:NaN 15860:1 15871:1 15882:2 15893:6 15904:24 15915:120 15926:720 159310:3628800 159411:39916800 159512:479001600 1596&froot 1597# sqrt() 1598+0:2:0 1599+1:2:1 1600-1:2:NaN 1601# -$x ** (1/2) => -$y, but not in froot() 1602-123.456:2:NaN 1603+inf:2:inf 1604-inf:2:NaN 16052:2:1.41421356237309504880168872420969807857 1606-2:2:NaN 16074:2:2 16089:2:3 160916:2:4 1610100:2:10 1611123.456:2:11.11107555549866648462149404118219234119 161215241.38393:2:123.4559999756998444766131352122991626468 16131.44:2:1.2 161412:2:3.464101615137754587054892683011744733886 16150.49:2:0.7 16160.0049:2:0.07 1617# invalid ones 16181:NaN:NaN 1619-1:NaN:NaN 16200:NaN:NaN 1621-inf:NaN:NaN 1622+inf:NaN:NaN 1623NaN:0:NaN 1624NaN:2:NaN 1625NaN:inf:NaN 1626NaN:inf:NaN 162712:-inf:NaN 162812:inf:NaN 1629+0:0:NaN 1630+1:0:NaN 1631-1:0:NaN 1632-2:0:NaN 1633-123.45:0:NaN 1634+inf:0:NaN 163512:1:12 1636-12:1:NaN 16378:-1:NaN 1638-8:-1:NaN 1639# cubic root 16408:3:2 1641-8:3:NaN 1642# fourths root 164316:4:2 164481:4:3 1645# see t/bigroot() for more tests 1646&fsqrt 1647+0:0 1648-1:NaN 1649-2:NaN 1650-16:NaN 1651-123.45:NaN 1652nanfsqrt:NaN 1653+inf:inf 1654-inf:NaN 16551:1 16562:1.41421356237309504880168872420969807857 16574:2 16589:3 165916:4 1660100:10 1661123.456:11.11107555549866648462149404118219234119 166215241.38393:123.4559999756998444766131352122991626468 16631.44:1.2 1664# sqrt(1.44) = 1.2, sqrt(e10) = e5 => 12e4 16651.44E10:120000 16662e10:141421.356237309504880168872420969807857 1667144e20:120000000000 1668# proved to be an endless loop under 7-9 166912:3.464101615137754587054892683011744733886 16700.49:0.7 16710.0049:0.07 1672&is_nan 1673123:0 1674abc:1 1675NaN:1 1676-123:0 1677&is_inf 1678+inf::1 1679-inf::1 1680abc::0 16811::0 1682NaN::0 1683-1::0 1684+inf:-:0 1685+inf:+:1 1686-inf:-:1 1687-inf:+:0 1688# it must be exactly /^[+-]inf$/ 1689+infinity::0 1690-infinity::0 1691&is_odd 1692abc:0 16930:0 1694-1:1 1695-3:1 16961:1 16973:1 16981000001:1 16991000002:0 1700+inf:0 1701-inf:0 1702123.45:0 1703-123.45:0 17042:0 1705&is_int 1706NaNis_int:0 17070:1 17081:1 17092:1 1710-2:1 1711-1:1 1712-inf:0 1713+inf:0 1714123.4567:0 1715-0.1:0 1716-0.002:0 1717&is_even 1718abc:0 17190:1 1720-1:0 1721-3:0 17221:0 17233:0 17241000001:0 17251000002:1 17262:1 1727+inf:0 1728-inf:0 1729123.456:0 1730-123.456:0 17310.01:0 1732-0.01:0 1733120:1 17341200:1 1735-1200:1 1736&is_positive 17370:0 17381:1 1739-1:0 1740-123:0 1741NaN:0 1742-inf:0 1743+inf:1 1744&is_negative 17450:0 17461:0 1747-1:1 1748-123:1 1749NaN:0 1750-inf:1 1751+inf:0 1752&parts 17530:0 1 17541:1 0 1755123:123 0 1756-123:-123 0 1757-1200:-12 2 1758NaNparts:NaN NaN 1759+inf:inf inf 1760-inf:-inf inf 1761&exponent 17620:1 17631:0 1764123:0 1765-123:0 1766-1200:2 1767+inf:inf 1768-inf:inf 1769NaNexponent:NaN 1770&mantissa 17710:0 17721:1 1773123:123 1774-123:-123 1775-1200:-12 1776+inf:inf 1777-inf:-inf 1778NaNmantissa:NaN 1779&length 1780123:3 1781-123:3 17820:1 17831:1 178412345678901234567890:20 1785&is_zero 1786NaNzero:0 1787+inf:0 1788-inf:0 17890:1 1790-1:0 17911:0 1792&is_one 1793NaNone:0 1794+inf:0 1795-inf:0 17960:0 17972:0 17981:1 1799-1:0 1800-2:0 1801&ffloor 18020:0 1803abc:NaN 1804+inf:inf 1805-inf:-inf 18061:1 1807-51:-51 1808-51.2:-52 180912.2:12 18100.12345:0 18110.123456:0 18120.1234567:0 18130.12345678:0 18140.123456789:0 1815&fceil 18160:0 1817abc:NaN 1818+inf:inf 1819-inf:-inf 18201:1 1821-51:-51 1822-51.2:-51 182312.2:13 1824