From: Paul Eggert <eggert@cs.ucla.edu>
To: rms@gnu.org, Pip Cet <pipcet@gmail.com>
Cc: andrewjmoreton@gmail.com, 32463@debbugs.gnu.org
Subject: bug#32463: 27.0.50; (logior -1) => 4611686018427387903
Date: Sun, 19 Aug 2018 20:47:29 -0700 [thread overview]
Message-ID: <bfec5087-b681-bbb8-4423-ee7c0e838851@cs.ucla.edu> (raw)
In-Reply-To: <E1fraS8-0003CD-CX@fencepost.gnu.org>
Richard Stallman wrote:
> What exactly is the problem with lsh and bignums? Is it for negative
> numbers because there is no specific width?
Yes, that's it.
> One possible solution is to give lsh an optional third argument to
> specify the nominal width of the first argument. The default could be
> the width of a fixnum on your platform.
Although we discussed something along those lines and could easily implement
something, it's a bit trickier than it might sound at first, because of corner
cases where the semantics are unclear. Here's one possible implementation (there
are other approaches of course):
(defun lsh (value count &optional width)
(when (and (< value 0) (< count 0))
(let ((lo (if width (ash 1 (1- width)) most-negative-fixnum)))
(when (< value lo)
(signal 'args-out-of-range (list value count width)))
(setq value (logand (ash value -1) (- -1 lo)))
(setq count (1+ count))))
(ash value count))
I am skeptical whether the complexity of this extension is worth the effort to
maintain and document. In a language with bignums, if you need a mask of bits
you simply use a nonnegative integer, which means you can use ash without
worrying about the corner cases that invariably afflict lsh.
> How does Scheme handle the issue?
Scheme does not have logical shifts, only arithmetic shifts. Logical shifts
don't make that much sense once you have bignums.
next prev parent reply other threads:[~2018-08-20 3:47 UTC|newest]
Thread overview: 45+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-08-17 3:29 bug#32463: 27.0.50; (logior -1) => 4611686018427387903 Katsumi Yamaoka
2018-08-17 5:59 ` Pip Cet
2018-08-17 7:40 ` Katsumi Yamaoka
2018-08-17 9:27 ` Andy Moreton
2018-08-17 11:36 ` Pip Cet
2018-08-17 11:53 ` Pip Cet
2018-08-17 13:27 ` Andy Moreton
2018-08-18 22:43 ` Paul Eggert
2018-08-17 13:24 ` Andy Moreton
2018-08-18 18:48 ` Paul Eggert
2018-08-18 18:59 ` Eli Zaretskii
2018-08-18 19:58 ` Pip Cet
2018-08-18 22:27 ` Paul Eggert
2018-08-19 15:03 ` Eli Zaretskii
2018-08-18 19:59 ` Paul Eggert
2018-08-18 19:45 ` Andy Moreton
2018-08-19 10:43 ` Live System User
2018-08-20 3:02 ` Richard Stallman
2018-08-20 3:47 ` Paul Eggert [this message]
2018-08-21 3:37 ` Richard Stallman
2018-08-18 22:56 ` Paul Eggert
2018-08-18 23:17 ` Paul Eggert
2018-08-19 10:34 ` Andy Moreton
2018-08-19 10:48 ` Pip Cet
2018-08-19 10:59 ` Paul Eggert
2018-08-19 11:32 ` Pip Cet
2018-08-21 9:40 ` Paul Eggert
2018-08-21 10:50 ` Andy Moreton
2018-08-21 14:36 ` Eli Zaretskii
2018-08-21 14:52 ` Andy Moreton
2018-08-21 17:24 ` Paul Eggert
2018-08-19 10:52 ` Paul Eggert
2018-08-22 2:29 ` Paul Eggert
2018-08-22 16:56 ` Tom Tromey
2018-08-22 17:52 ` Paul Eggert
2018-08-22 18:25 ` Eli Zaretskii
2018-08-23 0:28 ` Paul Eggert
2018-08-23 2:39 ` Eli Zaretskii
2018-08-19 18:00 ` Andy Moreton
2018-08-22 2:34 ` Paul Eggert
2018-08-22 23:27 ` Andy Moreton
2018-08-23 14:05 ` Eli Zaretskii
2018-08-22 2:56 ` Paul Eggert
2018-08-22 8:20 ` Andy Moreton
2018-08-22 8:39 ` Andy Moreton
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.gnu.org/software/emacs/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=bfec5087-b681-bbb8-4423-ee7c0e838851@cs.ucla.edu \
--to=eggert@cs.ucla.edu \
--cc=32463@debbugs.gnu.org \
--cc=andrewjmoreton@gmail.com \
--cc=pipcet@gmail.com \
--cc=rms@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).