On Mon, 29 Jan 2007, Igor Sobrado wrote:

> Hi again.
> 
> Of course, Karel Kulhavy is the one to provide feedback on this patch.
> But I have tried it too (after upgrading src/usr.bin/bc) and seems to
> be working fine for this case (NetBSD and Solaris are running their own
> flavours of bc):
> 
> For OpenBSD:
> 
> $ bc -l
> ibase=4
> obase=10
> scale=100
> l(1.031)
> .023311001002311221102233202
> l(1.03)
> .022211330213133010123220033
> 
> On NetBSD 3.0.1 we have:
> 
> $ bc -l
> ibase=4
> obase=10
> scale=100
> l(1.031)
> .023311001002311221102233202
> l(1.03)
> .022211330213133010123220033
> 
> On Solaris 9 SPARC (on a 64-bit Blade 2000):
> 
> $ bc -l
> ibase=4
> obase=10
> scale=100
> l(1.031)
> .02331113010200100201230200
> l(1.03)
> .02233332120032011033021322
> 
> There are some differences on the third example provided by Karel:
> 
> On OpenBSD:
> 
> $ bc -l
> ibase=16
> obase=10
> scale=10
> l(0.1000001)
> -2.C5C85FDF473DE3
> l(0.0FFFF)
> -2.C5D2DC7106EFA6
> l(0.1)
> -2386F26FC0FFFF
> scale=100
> l(0.10000000000000000000000000000000000000000000000000001)
> -2.C5C85FDF473DE6AF278ECE600FCBDABD03CD0C99CA62D8B628345D6E2EABE8AF9\
> EE1D881B7AEB26156554BED2BE86C43B4BAB8D704E085109D5CECA445A6E094FA5B2\
> 858892BA3146B2F6844C5F0E1FAE7AA6F0EC4D980EC95BE83B1D95FDD2DCB3A1EC67\
> 595232BD77E6
> l(0.1)
> -553F75FDCEFCEF46EEDDC80DCC7F755BC28F265F9EF17CC5573C063FF540E3C42D3\
> 5A1D153624ADC666B026B2716ED595D80FCF4A6E706BDE50C612152F87D8D99F72BE\
> D3875B982E7C00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF\
> FFFFFFFFFF
> [...]
> 
> On NetBSD 3.0.1:
> 
> $ bc -l
> ibase=16
> obase=10
> scale=10
> l(0.1000001)
> -2.C5C85FDF473DE3
> l(0.0FFFF)
> -2.C5D2DC7106EFA6
> l(0.1)
> -FFFFFFFFFFFFFFFF.00000000000000
> scale=100
> l(0.10000000000000000000000000000000000000000000000000001)
> -2.C5C85FDF473DE6AF278ECE600FCBDABD03CD0C99CA62D8B628345D6E2EABE8AF9\
> EE1D881B7AEB26156554BED2BE86C43B4BAB8D704E085109D5CECA445A6E094FA5B2\
> 858892BA3146B2F6844C5F0E1FAE7AA6F0EC4D980EC95BE83B1D95FDD2DCB3A1EC67\
> 595232BD77E9
> l(0.1)
> -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF\
> FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF\
> FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF\
> FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF.00000000000000\
> 00000000000000000000000000000000000000000000000000000000000000000000\
> 00000000000000000000000000000000000000000000000000000000000000000000\
> 000000000000000000000000000000000000000000000000000000000000000
> 
> On Solaris...
> 
> $ bc -l
> ibase=16
> obase=10
> scale=10
> l(0.1000001)
> -2.C5C85EDF473ED
> l(0.0FFFF)
> -2.C5C95FDFC73EA
> l(0.1)
> -2.C5C85FDF473DE
> scale=100
> scale factor is too large
> scale=59
> l(0.10000000000000000000000000000000000000000000000000001)
> -2.C5C85FDF473DE6AF278ECE600FCBDABD03CD0C99CA62D8B628335D6E2EABE8AF9EE\
> 1D881C
> l(0.1)
> -2.C5C85FDF473DE6AF278ECE600FCBDABD03CD0C99CA62D8B628345D6E2EABE8AF9EE\
> 1D881B
> 
> (I suppose that setting obase=10 after setting the input base to 16d
> means that the output base is set to 0x10...)

indeed.

In the last example Solaris does no seem to truncate 0.1 to 0.

l(0) is supposed to return "a really large" negative number. If you
use base 10 it's easier to see what is going on.

        -Otto

Reply via email to