[Bug 275661] /usr/bin/dc hangs with a trivial calculation
- Reply: bugzilla-noreply_a_freebsd.org: "[Bug 275661] /usr/bin/dc hangs with a trivial calculation"
- Reply: bugzilla-noreply_a_freebsd.org: "[Bug 275661] /usr/bin/dc hangs with a trivial calculation"
- Reply: bugzilla-noreply_a_freebsd.org: "[Bug 275661] /usr/bin/dc really slow with a trivial calculation"
- Reply: bugzilla-noreply_a_freebsd.org: "[Bug 275661] /usr/bin/dc really slow with a trivial calculation"
- Reply: bugzilla-noreply_a_freebsd.org: "[Bug 275661] /usr/bin/dc really slow with a trivial calculation"
- Reply: bugzilla-noreply_a_freebsd.org: "[Bug 275661] /usr/bin/dc really slow with a trivial calculation"
- Reply: bugzilla-noreply_a_freebsd.org: "[Bug 275661] /usr/bin/dc really slow with a trivial calculation"
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Sat, 09 Dec 2023 18:11:42 UTC
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=275661 Bug ID: 275661 Summary: /usr/bin/dc hangs with a trivial calculation Product: Base System Version: 13.2-RELEASE Hardware: Any OS: Any Status: New Severity: Affects Many People Priority: --- Component: standards Assignee: standards@FreeBSD.org Reporter: dclarke@blastwave.org While having a discussion about an article written by Martin Gardner for Scientific American[1] magazine somewhere in the late '70s I was reminded of the old seven digit calculator problem : enter 1.0000001 if you can square that number repeat the square 27 times in total the result should be 674530.470741 or very close A great many calculators of the era could not even get close to the correct result. The Hewlett Packard HP41C and similar were exceptional in that they compute all intermediate results with greater precision than is displayed. To demonstrate the calculation one may use bc : callisto$ uname -a FreeBSD callisto 13.2-RELEASE-p4 FreeBSD 13.2-RELEASE-p4 GENERIC amd64 callisto$ freebsd-version -kru 13.2-RELEASE-p4 13.2-RELEASE-p4 13.2-RELEASE-p5 callisto$ bc scale=16 a=1.0000001 b=a*a b 1.00000020000001 a=b*b a 1.0000004000000600 b=a*a b 1.0000008000002800 a=b*b a 1.0000016000012000 b=a*a b 1.0000032000049600 a=b*b a 1.0000064000201600 b=a*a b 1.0000128000812802 a=b*b a 1.0000256003264024 b=a*a b 1.0000512013081815 a=b*b a 1.0001024052379369 b=a*a b 1.0002048209627065 a=b*b a 1.0004096838770397 b=a*a b 1.0008195355949585 a=b*b a 1.0016397428285084 b=a*a b 1.0032821744135604 a=b*b a 1.0065751214960018 b=a*a b 1.0131934752146907 a=b*b a 1.0265610182176220 b=a*a b 1.0538275241240008 a=b*b a 1.1105524506013214 b=a*a b 1.2333267455366004 a=b*b a 1.5210948612559022 b=a*a b 2.3137295769391123 a=b*b a 5.3533445552028435 b=a*a b 28.6582979267199303 a=b*b a 821.2980400566398555 b=a*a b 674530.4706008780046192 ^D callisto$ That is not a bad result given that we were limited to 16 decimal digits. The same result *should* be from 1.0000001^( 2 ^ 27 ) : callisto$ bc scale=16 2^27 134217728 1.0000001^134217728 ^C^C interrupt (type "quit" to exit) 0: (main) ready for more input ^D callisto$ Here we see that the old dc "desk calculator" underneath bc has locked up in some strange way. callisto$ which dc /usr/bin/dc callisto$ echo '16k 1.0000001 2 27^ p ^ pq' | dc 134217728 ^C^C 0: (main) ready for more input callisto$ Just hangs. Never seems to return and I left it alone for quite some time. Eventually I hit the CTRL+C and you see the message above. This seems like strange behavior. Curious about where this behavior may have come from I went and powered up an old Sun SPARCStation 20. Yes really ... s20$ uname -a SunOS nix 5.8 Generic_117350-62 sun4m sparc SUNW,SPARCstation-20 s20$ echo '16k 1.0000001 2 27^ p ^ pq' | dc 134217728 exp too big empty stack s20$ Similar behavior is seen on an old SGI Indigo running IRIX 5.3 as well as on an IBM OS400 machine on powerpc. The calculation can be easily done with logarithms given that the identity ln( a ^ b ) = b * ln( a ) : callisto$ bc -l scale=16 e( 2^27 * l( 1.0000001 ) ) 674530.4707410543814025 ^D callisto$ It would be best if dc would not just hang. Seemingly forever. Dennis Clarke RISC-V/SPARC/PPC/ARM/CISC UNIX and Linux spoken [1] my memory may have failed me but I think it was Martin Gardner -- You are receiving this mail because: You are the assignee for the bug.