On Mon, 29 Jan 2007, Karel Kulhavy wrote:
> I just found three bugs in the OpenBSD 4.0 "bc" program.
All three bugs seem to related to the use of a non-decimal input base
in combination with using the -l lib.
This is because the stored routines interpret the number according to
the base at execution time.
Shows what is going on. I have to think a bit on how to solve it and
what (id) SU says anything about this.
$ bc
define d(x) {
return x + 1.1;
}
d(0)
1.1
ibase=2
d(0)
1.5
-Otto
>
> 0) some "evil" numbers make bc hang:
> [EMAIL PROTECTED]:~$ bc -l
> ibase=4
> obase=10
> scale=100
> l(1.031)
> .023311001002311221102233202
> (immediate reply)
> l(1.03)
> [ - HANG at least for 11 minutes - ]
> PID USERNAME PRI NICE SIZE RES STATE WAIT TIME CPU COMMAND
> 8025 clock 64 0 1528K 1916K run - 11:37 98.97% dc
>
> 1) The same input number produces five diametrally different results:
> [EMAIL PROTECTED]:~$ bc -l
> ibase=11
> obase=10
> scale=100
> l(0.2)
> -2.336816A4A3A1303948A3495818A111140A67A8A9A80556A4767262A3229825592\
> A03587166864722462495814249A8938256309517495755642A7
> l(0.20)
> -1.7954400220602A460838195740444338436003009806803667168750A9A241142\
> 72587A144639908A7016A5942696269369157A34282060693446
> l(0.200)
> -1.78902828358631380505724195179A512235778A74463975A17543454945A4876\
> 417795730427237570460376500227690133A16196A1AA80A242
> l(0.2000)
> -1.783175444431A171175806A94595310A605471291620215436052394A85515172\
> 7203678147326AA621928022938A7195425A3694533825144951
> l(0.20000)
> -1.783096A58955850599713A23010283880184908158785094820A1187923799A64\
> 94181A000871494461384AA1578162954A793643812592151238
>
> 2) There are multiple points in which the logarithm function returns an
> unplausibly large value which further depends heavily on the current precision
> setting, while it still gives plausible results if you move
> only a tiny little bit either side:
>
> [EMAIL PROTECTED]:~$ bc -l
> ibase=16
> obase=10
> scale=10
> l(0.1000001)
> -2.C5C85FDF473DE3
> l(0.0FFFF)
> -2.C5D2DC7106EFA6
> l(0.1)
> -FFFFFFFFFFFFFFFF
> scale=100
> l(0.10000000000000000000000000000000000000000000000000001)
> -2.C5C85FDF473DE6AF278ECE600FCBDABD03CD0C99CA62D8B628345D6E2EABE8AF9\
> EE1D881B7AEB26156554BED2BE86C43B4BAB8D704E085109D5CECA445A6E094FA5B2\
> 858892BA3146B2F6844C5F0E1FAE7AA6F0EC4D980EC95BE83B1D95FDD2DCB3A1EC67\
> 595232BD77E6
> l(0.1)
> -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF\
> FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF\
> FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF\
> FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
> l(0.0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF)
> -2.C5C85FDF473DE6AF278ECE600FCBDABD03CD0C99CA62D91A9736982097B12EA8C\
> 1A305AED9D7ED0C9C0E87FF29D6EABBDB73C47C018C2F18D5D80C5B354E83BAA5623\
> 5573ECD2A69783D2118428CBD2150BD9CAA2EEE7FB6B9C190BDF4B80392A9F465BF3\
> C5DE964480E4
> l(0.01)
> -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF\
> FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF\
> FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF\
> FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
> l(0.02)
> -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF\
> FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF\
> FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF\
> FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
> l(0.04)
> -4.9AEC6EED554560B752B6B15C16985147147F67CED2EFC8741E30F4100F816B94B\
> 17816BD8D4082E663865E0162F86B41631120C2085F16D7DC7BC4201728B6B3C167C\
> 514546488F3B2D5361D86C18FDF7B367582559E37D28B0DDA4E90CE3DDE533D9AD91\
> B02842C74998
> l(0.008)
>
> -6.E862A663FFE81112FC120A0A21E479EA9EBF1BB63C67ACAE2D496E181742215F0\
> A34221C53E0C45995498D021474A0E21499B1230C8EA243CAB9A63022BD120DA21BA\
> 79E7E96CD6D8C3FD12C4A2257CF38D1B043806D53BBD094C775D9355CCD7CDC6845A\
> 883C642AEE68
> l(0.004)
> -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF\
> FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF\
> FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF\
> FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
> l(0.002)
> -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF\
> FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF\
> FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF\
> FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
> l(0.001)
> -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF\
> FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF\
> FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF\
> FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
> l(0.0008)
> -9.35D8DDDAAA8AC16EA56D62B82D30A28E28FECF9DA5DF90E83C61E8201F02D7296\
> 2F02D7B1A8105CCC70CBC02C5F0D682C622418410BE2DAFB8F788402E516D6782CF8\
> A28A8C911E765AA6C3B0D831FBEF66CEB04AB3C6FA5161BB49D219C7BBCA67B35B23\
> 6050858E9334
> l(0.0004)
> -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF\
> FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF\
> FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF\
> FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
> l(0.00008)
> -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF\
> FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF\
> FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF\
> FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
> l(0.00008000000000000000000000000000000000000000000000000000000001)
> -B.C8939774EEC71468681EED18432261A35027758D9C2419062ADE8D14465A9CEA6\
> 33FD8274CA6761DAEEA82AFFA9BCC1FC0199191D4BA35869CCAEDBA28053A7928036\
> B7846F97516C7897B24493FC06A589457FEC49C63ED7C69AFB3DBD76C029FB702CB7\
> 3B9D57A53DB4
>
> CL<