From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Zefram Newsgroups: gmane.lisp.guile.bugs Subject: bug#21883: unnecessary bit shifting range limits Date: Thu, 12 Nov 2015 07:07:25 +0000 Message-ID: <20151112070725.GA875@fysh.org> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Trace: ger.gmane.org 1447312104 7159 80.91.229.3 (12 Nov 2015 07:08:24 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Thu, 12 Nov 2015 07:08:24 +0000 (UTC) To: 21883@debbugs.gnu.org Original-X-From: bug-guile-bounces+guile-bugs=m.gmane.org@gnu.org Thu Nov 12 08:08:13 2015 Return-path: Envelope-to: guile-bugs@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1ZwlzP-00075Q-Ut for guile-bugs@m.gmane.org; Thu, 12 Nov 2015 08:08:12 +0100 Original-Received: from localhost ([::1]:44890 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZwlzP-00061f-Cd for guile-bugs@m.gmane.org; Thu, 12 Nov 2015 02:08:11 -0500 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:34411) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZwlzK-0005zF-Tr for bug-guile@gnu.org; Thu, 12 Nov 2015 02:08:07 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ZwlzG-0002Er-Si for bug-guile@gnu.org; Thu, 12 Nov 2015 02:08:06 -0500 Original-Received: from debbugs.gnu.org ([208.118.235.43]:43229) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZwlzG-0002Em-QR for bug-guile@gnu.org; Thu, 12 Nov 2015 02:08:02 -0500 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.80) (envelope-from ) id 1ZwlzG-0006Bb-3p for bug-guile@gnu.org; Thu, 12 Nov 2015 02:08:02 -0500 X-Loop: help-debbugs@gnu.org Resent-From: Zefram Original-Sender: "Debbugs-submit" Resent-CC: bug-guile@gnu.org Resent-Date: Thu, 12 Nov 2015 07:08:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: report 21883 X-GNU-PR-Package: guile X-GNU-PR-Keywords: X-Debbugs-Original-To: bug-guile@gnu.org Original-Received: via spool by submit@debbugs.gnu.org id=B.144731208123775 (code B ref -1); Thu, 12 Nov 2015 07:08:01 +0000 Original-Received: (at submit) by debbugs.gnu.org; 12 Nov 2015 07:08:01 +0000 Original-Received: from localhost ([127.0.0.1]:33937 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1ZwlzF-0006BK-3E for submit@debbugs.gnu.org; Thu, 12 Nov 2015 02:08:01 -0500 Original-Received: from eggs.gnu.org ([208.118.235.92]:52311) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1Zwlyu-0006At-Mu for submit@debbugs.gnu.org; Thu, 12 Nov 2015 02:07:59 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Zwlyt-00021h-OW for submit@debbugs.gnu.org; Thu, 12 Nov 2015 02:07:40 -0500 Original-Received: from lists.gnu.org ([2001:4830:134:3::11]:33891) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Zwlyt-00021Y-Ly for submit@debbugs.gnu.org; Thu, 12 Nov 2015 02:07:39 -0500 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:34059) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Zwlys-0005G1-VJ for bug-guile@gnu.org; Thu, 12 Nov 2015 02:07:39 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Zwlyo-00020W-NF for bug-guile@gnu.org; Thu, 12 Nov 2015 02:07:38 -0500 Original-Received: from river.fysh.org ([87.98.248.19]:42505) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Zwlyo-000201-G6 for bug-guile@gnu.org; Thu, 12 Nov 2015 02:07:34 -0500 Original-Received: from zefram by river.fysh.org with local (Exim 4.80 #2 (Debian)) id 1Zwlyf-0001Bq-Oo; Thu, 12 Nov 2015 07:07:25 +0000 Content-Disposition: inline X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-detected-operating-system: by eggs.gnu.org: Error: Malformed IPv6 address (bad octet value). X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-Received-From: 208.118.235.43 X-BeenThere: bug-guile@gnu.org List-Id: "Bug reports for GUILE, GNU's Ubiquitous Extension Language" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-guile-bounces+guile-bugs=m.gmane.org@gnu.org Original-Sender: bug-guile-bounces+guile-bugs=m.gmane.org@gnu.org Xref: news.gmane.org gmane.lisp.guile.bugs:7889 Archived-At: Not really outright bugs, but these responses are less than awesome: $ guile -c '(write (logbit? (ash 1 100) 123))' ERROR: Value out of range 0 to 18446744073709551615: 1267650600228229401496703205376 $ guile -c '(write (ash 0 (ash 1 100)))' ERROR: Value out of range -9223372036854775808 to 9223372036854775807: 1267650600228229401496703205376 $ guile -c '(write (ash 123 (ash -1 100)))' ERROR: Value out of range -9223372036854775808 to 9223372036854775807: -1267650600228229401496703205376 In all three cases, the theoretically-correct result of the expression is not only representable but easily computed. The functions could be improved to avoid failing in these cases, by adding logic amounting to: (define (better-logbit? b v) (if (>= b (integer-length v)) (< v 0) (logbit? b v))) (define (better-ash v s) (cond ((= v 0) 0) ((<= s (- (integer-length v))) (if (< v 0) -1 0)) (else (ash v s)))) -zefram