GNU bug report logs - #75105
(cl-random -1.0e+INF)

Please note: This is a static page, with minimal formatting, updated once a day.
Click here to see this page with the latest information and nicer formatting.

Package: emacs; Severity: wishlist; Reported by: Pip Cet <pipcet@HIDDEN>; dated Wed, 25 Dec 2024 23:28:02 UTC; Maintainer for emacs is bug-gnu-emacs@HIDDEN.

Message received at 75105 <at> debbugs.gnu.org:


Received: (at 75105) by debbugs.gnu.org; 17 Feb 2025 18:26:39 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Mon Feb 17 13:26:39 2025
Received: from localhost ([127.0.0.1]:48955 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tk5pG-0000nM-Om
	for submit <at> debbugs.gnu.org; Mon, 17 Feb 2025 13:26:39 -0500
Received: from mail-10631.protonmail.ch ([79.135.106.31]:17543)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <pipcet@HIDDEN>)
 id 1tk5pD-0000mc-NB
 for 75105 <at> debbugs.gnu.org; Mon, 17 Feb 2025 13:26:36 -0500
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=protonmail.com;
 s=protonmail3; t=1739816788; x=1740075988;
 bh=6DkSz+8BntsXfvojF0XLEKyzHV54A38Mc+KkSV6dkNA=;
 h=Date:To:From:Cc:Subject:Message-ID:In-Reply-To:References:
 Feedback-ID:From:To:Cc:Date:Subject:Reply-To:Feedback-ID:
 Message-ID:BIMI-Selector:List-Unsubscribe:List-Unsubscribe-Post;
 b=fghzMTBaK1RMutue/NjiAJKEpCz68A8khBsb2ABRVXZcYLQaJEq6X645pOZ8gR/Lb
 dePXTGFkaIHpSuP//TLodrupJM6Ujp975DXPFR6Z4bFUp4AxxQMjvy6YvhTLoUxOar
 WlVJGTetZBb7h28oSQXbH0u4X5L7uydUxjkjN4omLzt+Eu6fhoK7otgR5D9dZgbbb2
 OfLAhT6w6QO7j89IbJ5qesrTuVlanMriwIDDjCU1A4pszf1zVe2nol50VEmCFT+BSg
 lSKPizLWCGWERogtxNH6+96UsEoRyr5RoG8xyFhbG+vM3CZCWfttLPtzly+kzPB2Cu
 OKGEpCO/sqyyA==
Date: Mon, 17 Feb 2025 18:26:23 +0000
To: =?utf-8?Q?Mattias_Engdeg=C3=A5rd?= <mattias.engdegard@HIDDEN>
From: Pip Cet <pipcet@HIDDEN>
Subject: Re: bug#75105: (cl-random -1.0e+INF)
Message-ID: <87h64s8m3d.fsf@HIDDEN>
In-Reply-To: <CC4DD2DE-475E-4552-B0FD-187F213C53D2@HIDDEN>
References: <87seqb73aa.fsf@HIDDEN> <87ikpahfxl.fsf@HIDDEN>
 <CC4DD2DE-475E-4552-B0FD-187F213C53D2@HIDDEN>
Feedback-ID: 112775352:user:proton
X-Pm-Message-ID: 894797de20b05e7719047d7ab3e4c98bd269ee26
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 75105
Cc: bug-gnu-emacs@HIDDEN, 75105 <at> debbugs.gnu.org, monnier@HIDDEN,
 mattiasengdegard@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

Mattias Engdeg=C3=A5rd <mattias.engdegard@HIDDEN> writes:

> 16 feb. 2025 kl. 01.50 skrev Pip Cet <pipcet@HIDDEN>:
>
>> (cl-random 0.0) returns 0.0, but one could argue it should throw
>
> It definitely should throw, but perhaps it's not worth the
> incompatibility? Not sure, because existing code that passes 0.0 is
> likely buggy anyway.  Or we could say that it's just an ad-hoc
> extension, by vague analogy of (car nil) =3D nil.

On mathematical grounds, in my humble but correct opinion, the
pseudo-algorithm should be:

1. find a random real number in the closed interval [0, a]
2. round it towards zero.

IOW, that 'a' is never the result is a consequence of the rounding step,
not of using a half-open interval in step 1.

However, Common Lisp disagrees, and the cl- prefix kind of hints we
should heed its opinions.

And using (* x (cl-random 1.0)) if that's what you want seems easy
enough (and, either way, you get bitten by the low precision, with only
8 million possible outcomes).

Will modify the patch accordingly.

Pip





Information forwarded to bug-gnu-emacs@HIDDEN:
bug#75105; Package emacs. Full text available.

Message received at submit <at> debbugs.gnu.org:


Received: (at submit) by debbugs.gnu.org; 17 Feb 2025 18:26:48 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Mon Feb 17 13:26:48 2025
Received: from localhost ([127.0.0.1]:48960 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tk5pP-0000nz-DS
	for submit <at> debbugs.gnu.org; Mon, 17 Feb 2025 13:26:48 -0500
Received: from lists.gnu.org ([2001:470:142::17]:37344)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <pipcet@HIDDEN>)
 id 1tk5pN-0000n1-9P
 for submit <at> debbugs.gnu.org; Mon, 17 Feb 2025 13:26:45 -0500
Received: from eggs.gnu.org ([2001:470:142:3::10])
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <pipcet@HIDDEN>)
 id 1tk5pC-0001RP-Lu
 for bug-gnu-emacs@HIDDEN; Mon, 17 Feb 2025 13:26:34 -0500
Received: from mail-10630.protonmail.ch ([79.135.106.30])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <pipcet@HIDDEN>)
 id 1tk5p9-00083h-Jr
 for bug-gnu-emacs@HIDDEN; Mon, 17 Feb 2025 13:26:34 -0500
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=protonmail.com;
 s=protonmail3; t=1739816788; x=1740075988;
 bh=6DkSz+8BntsXfvojF0XLEKyzHV54A38Mc+KkSV6dkNA=;
 h=Date:To:From:Cc:Subject:Message-ID:In-Reply-To:References:
 Feedback-ID:From:To:Cc:Date:Subject:Reply-To:Feedback-ID:
 Message-ID:BIMI-Selector:List-Unsubscribe:List-Unsubscribe-Post;
 b=fghzMTBaK1RMutue/NjiAJKEpCz68A8khBsb2ABRVXZcYLQaJEq6X645pOZ8gR/Lb
 dePXTGFkaIHpSuP//TLodrupJM6Ujp975DXPFR6Z4bFUp4AxxQMjvy6YvhTLoUxOar
 WlVJGTetZBb7h28oSQXbH0u4X5L7uydUxjkjN4omLzt+Eu6fhoK7otgR5D9dZgbbb2
 OfLAhT6w6QO7j89IbJ5qesrTuVlanMriwIDDjCU1A4pszf1zVe2nol50VEmCFT+BSg
 lSKPizLWCGWERogtxNH6+96UsEoRyr5RoG8xyFhbG+vM3CZCWfttLPtzly+kzPB2Cu
 OKGEpCO/sqyyA==
Date: Mon, 17 Feb 2025 18:26:23 +0000
To: =?utf-8?Q?Mattias_Engdeg=C3=A5rd?= <mattias.engdegard@HIDDEN>
From: Pip Cet <pipcet@HIDDEN>
Subject: Re: bug#75105: (cl-random -1.0e+INF)
Message-ID: <87h64s8m3d.fsf@HIDDEN>
In-Reply-To: <CC4DD2DE-475E-4552-B0FD-187F213C53D2@HIDDEN>
References: <87seqb73aa.fsf@HIDDEN> <87ikpahfxl.fsf@HIDDEN>
 <CC4DD2DE-475E-4552-B0FD-187F213C53D2@HIDDEN>
Feedback-ID: 112775352:user:proton
X-Pm-Message-ID: 894797de20b05e7719047d7ab3e4c98bd269ee26
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
Received-SPF: pass client-ip=79.135.106.30; envelope-from=pipcet@HIDDEN;
 helo=mail-10630.protonmail.ch
X-Spam_score_int: -20
X-Spam_score: -2.1
X-Spam_bar: --
X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,
 DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001,
 RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001,
 RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_PASS=-0.001,
 SPF_PASS=-0.001 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-Spam-Score: 1.0 (+)
X-Debbugs-Envelope-To: submit
Cc: bug-gnu-emacs@HIDDEN, 75105 <at> debbugs.gnu.org, monnier@HIDDEN,
 mattiasengdegard@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -0.0 (/)

Mattias Engdeg=C3=A5rd <mattias.engdegard@HIDDEN> writes:

> 16 feb. 2025 kl. 01.50 skrev Pip Cet <pipcet@HIDDEN>:
>
>> (cl-random 0.0) returns 0.0, but one could argue it should throw
>
> It definitely should throw, but perhaps it's not worth the
> incompatibility? Not sure, because existing code that passes 0.0 is
> likely buggy anyway.  Or we could say that it's just an ad-hoc
> extension, by vague analogy of (car nil) =3D nil.

On mathematical grounds, in my humble but correct opinion, the
pseudo-algorithm should be:

1. find a random real number in the closed interval [0, a]
2. round it towards zero.

IOW, that 'a' is never the result is a consequence of the rounding step,
not of using a half-open interval in step 1.

However, Common Lisp disagrees, and the cl- prefix kind of hints we
should heed its opinions.

And using (* x (cl-random 1.0)) if that's what you want seems easy
enough (and, either way, you get bitten by the low precision, with only
8 million possible outcomes).

Will modify the patch accordingly.

Pip





Information forwarded to bug-gnu-emacs@HIDDEN:
bug#75105; Package emacs. Full text available.

Message received at submit <at> debbugs.gnu.org:


Received: (at submit) by debbugs.gnu.org; 17 Feb 2025 18:10:24 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Mon Feb 17 13:10:24 2025
Received: from localhost ([127.0.0.1]:48756 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tk5ZO-0004oe-Ii
	for submit <at> debbugs.gnu.org; Mon, 17 Feb 2025 13:10:24 -0500
Received: from lists.gnu.org ([2001:470:142::17]:58468)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <mattias.engdegard@HIDDEN>)
 id 1tk5ZC-0004kC-JX
 for submit <at> debbugs.gnu.org; Mon, 17 Feb 2025 13:10:03 -0500
Received: from eggs.gnu.org ([2001:470:142:3::10])
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <mattias.engdegard@HIDDEN>)
 id 1tk5Z6-0004iM-Jx
 for bug-gnu-emacs@HIDDEN; Mon, 17 Feb 2025 13:09:56 -0500
Received: from mail-lj1-x230.google.com ([2a00:1450:4864:20::230])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.90_1) (envelope-from <mattias.engdegard@HIDDEN>)
 id 1tk5Z5-0005m4-0C
 for bug-gnu-emacs@HIDDEN; Mon, 17 Feb 2025 13:09:56 -0500
Received: by mail-lj1-x230.google.com with SMTP id
 38308e7fff4ca-307c13298eeso47890081fa.0
 for <bug-gnu-emacs@HIDDEN>; Mon, 17 Feb 2025 10:09:54 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1739815793; x=1740420593; darn=gnu.org;
 h=to:references:message-id:content-transfer-encoding:cc:date
 :in-reply-to:from:subject:mime-version:sender:from:to:cc:subject
 :date:message-id:reply-to;
 bh=wP10mouz9anaxRnlABDn/aqMvEjqVdPyX0HDrPJr7lo=;
 b=VRUFneDYSrI0HWby+hhlLL9GTzNOvbFUki5LWAoZiuMOuTlTz5ZgEO6NitIj4ylPTi
 Qzzh357o/5E955/RV34LU4pcT9x6R/OyvVv9FhkxK3IemEbs3qnCyVeV1ASl2aI60DgD
 cDqJwCKD588tgHih9XCdF0sKBVym7OD+EfVSkm4TDpOYm0pTBDyaPA04+JuCBZs8QTIe
 Sf684fyGMjOGYBnrLvdwXixikZ68UpFX3ytWscVENuMYAalm4G4HrgsqExfTzu46OZjM
 sb1XDMEOUOVl84Ch/xKjiIxUFZrcNtvw/UoT5TOS+G2GYRS3cLhimParvF/reYU+Cim3
 W6RQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1739815793; x=1740420593;
 h=to:references:message-id:content-transfer-encoding:cc:date
 :in-reply-to:from:subject:mime-version:sender:x-gm-message-state
 :from:to:cc:subject:date:message-id:reply-to;
 bh=wP10mouz9anaxRnlABDn/aqMvEjqVdPyX0HDrPJr7lo=;
 b=DmP4jRk+yW80ok+mvFmaGFtHANsSQAw4ycrdsJ/SVPYVyTrkRYCdZjxcJ+HW/WFsL3
 1JK4bYWC/aEQ98v50M2jbLpp4/2ytXlIHICFSUCjvf/XWgHavcBDTP7pKVNHAKByftF9
 BMDe6AgHYlYGF/bQ2Bf+uF8osUsXmrPgVqTwUbjVt2puzkxyQRemeAwfTCpBdXWDN9+S
 QklbIIq8FYY9vv5Uogj1ql+Non1p7SGUNmoGhdGLvkwWk096WyLzOVuGWtgV4FFeYoF7
 uxeQHlge+UX7rrhB1o1J6XYpieJGrgPDW9w6CfP1GMbLVVsYjt5fcO/+0SG7KmujhVcK
 f93g==
X-Gm-Message-State: AOJu0YyFHkjiFl8VhAWHL/xDbFng36DETSUvT9xcEbCAlLxxy6QUJoQS
 LlNjN1I1EJrhIcOi6OnTizi1uZ8uIxZ/a1dVn4Pn19y1Rwxg3kDO
X-Gm-Gg: ASbGncsHGaacId2Jo4BTrZNIWM6qkEtWsLJdnx5rBohIfjBFvtUXq3I0CMT/X/w1xtZ
 NcXfQXCfK6sPAQfhGFrhMdPJ94PbqZBHxEKtLnHGTkulKPvAS0Pn61FdJBv5AKLPVNBx79ldLvz
 skCm9AYUP2goB4TdBWOUWw0y+WN27019B0oVMIiExjCsY7S3qCjaPpjyvqbH+RuioteC2ywqSjZ
 WedCUGo33Z8sNixSib9YTHZh8EScA/PXDvmDXvEqOcEE65L9icd4+FHqSZXQrr5zxtkZkfL+3ly
 0kFYTPrOQHD1tZCPGKHopE03QhRnMEOHGJpy85vrq5E8qhz3M+XjHXcrFcDIK+yA7eyP0oA94K0
 zP+cNcw==
X-Google-Smtp-Source: AGHT+IHs9xUoHivXg3azu3VKUgAJWbhkzrG8ia0SDulP3wUdtA4YH6zpIqF5Q0yNTJ5rEzb1eatrQA==
X-Received: by 2002:a2e:9616:0:b0:302:2cb3:bb1d with SMTP id
 38308e7fff4ca-309288de1d3mr25925591fa.12.1739815792437; 
 Mon, 17 Feb 2025 10:09:52 -0800 (PST)
Received: from smtpclient.apple (c188-150-186-155.bredband.tele2.se.
 [188.150.186.155]) by smtp.gmail.com with ESMTPSA id
 38308e7fff4ca-3091011ed8bsm17140091fa.56.2025.02.17.10.09.51
 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128);
 Mon, 17 Feb 2025 10:09:52 -0800 (PST)
Content-Type: text/plain;
	charset=us-ascii
Mime-Version: 1.0 (Mac OS X Mail 14.0 \(3654.120.0.1.15\))
Subject: Re: bug#75105: (cl-random -1.0e+INF)
From: =?utf-8?Q?Mattias_Engdeg=C3=A5rd?= <mattias.engdegard@HIDDEN>
In-Reply-To: <87ikpahfxl.fsf@HIDDEN>
Date: Mon, 17 Feb 2025 19:09:51 +0100
Content-Transfer-Encoding: quoted-printable
Message-Id: <CC4DD2DE-475E-4552-B0FD-187F213C53D2@HIDDEN>
References: <87seqb73aa.fsf@HIDDEN> <87ikpahfxl.fsf@HIDDEN>
To: Pip Cet <pipcet@HIDDEN>
X-Mailer: Apple Mail (2.3654.120.0.1.15)
Received-SPF: pass client-ip=2a00:1450:4864:20::230;
 envelope-from=mattias.engdegard@HIDDEN; helo=mail-lj1-x230.google.com
X-Spam_score_int: -20
X-Spam_score: -2.1
X-Spam_bar: --
X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,
 DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001,
 RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001,
 SPF_PASS=-0.001 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-Spam-Score: 1.0 (+)
X-Debbugs-Envelope-To: submit
Cc: bug-gnu-emacs@HIDDEN, 75105 <at> debbugs.gnu.org, monnier@HIDDEN,
 mattiasengdegard@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -0.0 (/)

16 feb. 2025 kl. 01.50 skrev Pip Cet <pipcet@HIDDEN>:

> (cl-random 0.0) returns 0.0, but one could argue it should throw

It definitely should throw, but perhaps it's not worth the =
incompatibility? Not sure, because existing code that passes 0.0 is =
likely buggy anyway.
Or we could say that it's just an ad-hoc extension, by vague analogy of =
(car nil) =3D nil.





Information forwarded to bug-gnu-emacs@HIDDEN:
bug#75105; Package emacs. Full text available.

Message received at 75105 <at> debbugs.gnu.org:


Received: (at 75105) by debbugs.gnu.org; 17 Feb 2025 18:10:02 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Mon Feb 17 13:10:02 2025
Received: from localhost ([127.0.0.1]:48748 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tk5ZB-0004kh-Se
	for submit <at> debbugs.gnu.org; Mon, 17 Feb 2025 13:10:02 -0500
Received: from mail-lj1-x229.google.com ([2a00:1450:4864:20::229]:43152)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.84_2) (envelope-from <mattias.engdegard@HIDDEN>)
 id 1tk5Z9-0004k3-Ea
 for 75105 <at> debbugs.gnu.org; Mon, 17 Feb 2025 13:10:00 -0500
Received: by mail-lj1-x229.google.com with SMTP id
 38308e7fff4ca-30920855d5bso33592861fa.0
 for <75105 <at> debbugs.gnu.org>; Mon, 17 Feb 2025 10:09:59 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1739815793; x=1740420593; darn=debbugs.gnu.org;
 h=to:references:message-id:content-transfer-encoding:cc:date
 :in-reply-to:from:subject:mime-version:sender:from:to:cc:subject
 :date:message-id:reply-to;
 bh=wP10mouz9anaxRnlABDn/aqMvEjqVdPyX0HDrPJr7lo=;
 b=bJ/KmK4N5ApMRMZOeEDEt75zI7vhPNc7Kyzez1pAHUjOYTuyAXjyFiM34f+yHepHfT
 lnjvXzd2kZ3JWSyaOW6KQhxqwAoJmv026fnOI+DC/GqSXmT+0QYLeWBjP8sioJbSYorV
 iTCjv1HOrIq0yJSn5KSNvZs+0cDcJHkYLmNwE3+OyvLOlcaseYagVVAuZMo3grrVE7Da
 bXMEDi6r2GHJ8lLC86/fFpct4UP69OCETXFEtXeF6MCcWxDy24qyDHsc/cuJeVIU150A
 8pMFJvl/KH3GgzhASgO+bj9DqqGmksfZUs678/BgUMlGDwzXRJBlBIQrSHrZQGvmSWI5
 fZbw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1739815793; x=1740420593;
 h=to:references:message-id:content-transfer-encoding:cc:date
 :in-reply-to:from:subject:mime-version:sender:x-gm-message-state
 :from:to:cc:subject:date:message-id:reply-to;
 bh=wP10mouz9anaxRnlABDn/aqMvEjqVdPyX0HDrPJr7lo=;
 b=xQ9XXDhfFLhNCone8f6JJr2zqOppXpKnOmZOssTINR/dhc9Upygenay1LWBc5E5PJG
 DKFKSQs99xuV4qMKScGmZvVTccdUkhdXJRepLUVGHQgz4YP8k8Wj9yz1Es1VwN6Sz19a
 x5mDX4meMwNiuojNhNOo81hiJWZ7UgQpvodIe1v8cf6WSHq7ho9fIbIbJzfqW77XHFH8
 9+9hpawXTdDzTb1cWdlNjScMH9sRClhduPifrFP+KbwppDrwUgvEx7KFFLxPTR9Dj8qz
 6xNoIxbwV4/QtetMIIWoFQM2K9BsYg/61Du2QG21S4J6NFZs6U7UOL8olP7lDBbqeieb
 DNvg==
X-Forwarded-Encrypted: i=1;
 AJvYcCW8OObsxgZF88h8jcaRutuvSQ5efZYo0OatnTgg+RAyOnS0WmdNVirjULzSA40e2j7DqkKzmw==@debbugs.gnu.org
X-Gm-Message-State: AOJu0YxVIRSMvptYzmIFNmCC//fE+n8svRo5yvR7TagkxaneVaNi2eSr
 j+Lh/r2/+QmRk5tByw3CUS8KE+cqBdu/VwOwFrwpK8UbQhSeELT4
X-Gm-Gg: ASbGnctE0moMGuLql1jUFxewILGKt+3C3r406r+zppndJpU0nDKxJKB68I8aO2KBPC2
 FL/shqhtMF/GtyxoIJVI/A20SOSYQ1OW1ocEIv2LdH7zJGPGgqH6T7INcodaheYH9FDasZBuyXH
 P4lJd9/4di3gDMABb4I2hSwaBS2ZT3MwO0EDTh4eYvKeLTIRTSHaYc235J34GTevaNymanXLjy0
 ZHmTooSdNRjUmey4ADuYOBG4etcCJBn7TNc8wqZmxQdz+w/XH4Lemmp/+dwuqJOtDSssoWqn5Qy
 ellXe5HknyxmynyAdMywo7VOFx/2t2IllWWZ+Pks28WcuFpk2XB5MTO2YpyfkeYs4nyYsvnnQGb
 qOvvuVQ==
X-Google-Smtp-Source: AGHT+IHs9xUoHivXg3azu3VKUgAJWbhkzrG8ia0SDulP3wUdtA4YH6zpIqF5Q0yNTJ5rEzb1eatrQA==
X-Received: by 2002:a2e:9616:0:b0:302:2cb3:bb1d with SMTP id
 38308e7fff4ca-309288de1d3mr25925591fa.12.1739815792437; 
 Mon, 17 Feb 2025 10:09:52 -0800 (PST)
Received: from smtpclient.apple (c188-150-186-155.bredband.tele2.se.
 [188.150.186.155]) by smtp.gmail.com with ESMTPSA id
 38308e7fff4ca-3091011ed8bsm17140091fa.56.2025.02.17.10.09.51
 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128);
 Mon, 17 Feb 2025 10:09:52 -0800 (PST)
Content-Type: text/plain;
	charset=us-ascii
Mime-Version: 1.0 (Mac OS X Mail 14.0 \(3654.120.0.1.15\))
Subject: Re: bug#75105: (cl-random -1.0e+INF)
From: =?utf-8?Q?Mattias_Engdeg=C3=A5rd?= <mattias.engdegard@HIDDEN>
In-Reply-To: <87ikpahfxl.fsf@HIDDEN>
Date: Mon, 17 Feb 2025 19:09:51 +0100
Content-Transfer-Encoding: quoted-printable
Message-Id: <CC4DD2DE-475E-4552-B0FD-187F213C53D2@HIDDEN>
References: <87seqb73aa.fsf@HIDDEN> <87ikpahfxl.fsf@HIDDEN>
To: Pip Cet <pipcet@HIDDEN>
X-Mailer: Apple Mail (2.3654.120.0.1.15)
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 75105
Cc: bug-gnu-emacs@HIDDEN, 75105 <at> debbugs.gnu.org, monnier@HIDDEN,
 mattiasengdegard@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

16 feb. 2025 kl. 01.50 skrev Pip Cet <pipcet@HIDDEN>:

> (cl-random 0.0) returns 0.0, but one could argue it should throw

It definitely should throw, but perhaps it's not worth the =
incompatibility? Not sure, because existing code that passes 0.0 is =
likely buggy anyway.
Or we could say that it's just an ad-hoc extension, by vague analogy of =
(car nil) =3D nil.





Information forwarded to bug-gnu-emacs@HIDDEN:
bug#75105; Package emacs. Full text available.

Message received at 75105 <at> debbugs.gnu.org:


Received: (at 75105) by debbugs.gnu.org; 16 Feb 2025 00:50:22 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sat Feb 15 19:50:22 2025
Received: from localhost ([127.0.0.1]:59031 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tjSrW-0004yl-48
	for submit <at> debbugs.gnu.org; Sat, 15 Feb 2025 19:50:22 -0500
Received: from mail-10629.protonmail.ch ([79.135.106.29]:57931)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <pipcet@HIDDEN>)
 id 1tjSrO-0004wy-C9
 for 75105 <at> debbugs.gnu.org; Sat, 15 Feb 2025 19:50:15 -0500
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=protonmail.com;
 s=protonmail3; t=1739667007; x=1739926207;
 bh=6Kxq8NXjDcf/xvJMoPZeHoGyUw8IJCZxbfBUaLiR5AU=;
 h=Date:To:From:Subject:Message-ID:In-Reply-To:References:
 Feedback-ID:From:To:Cc:Date:Subject:Reply-To:Feedback-ID:
 Message-ID:BIMI-Selector:List-Unsubscribe:List-Unsubscribe-Post;
 b=xH8M8ZL0zll4ib7PF4ah91FVbHfOmlT7pDGYMoEzVRMBe/qaypM8UvgiUJhP+b+Sz
 LbR8IUb6w32C7SV/kQgteNtd/9/L1l2VYseitAywL5PRx9IseAMH1xSpgGF5j1lbp9
 2Dj/Z/S2/oLH7h74jykaAoTGb2lTzRB+R0oCtiO0Jq+3sDJ+oZe8w3jmb/0GNbw/Pl
 R4bk2khw1zkIsKTbDc+aBbOr/mkp2JNpxLa4fm9Yd4dDpTaxTULUmW+nBdiCMHUgu5
 rrOaSOunYlN/c1uo9PDXryXbr3uc3030yObzNa5eJpxabWex2dQFOvp3w7aPZWZhm8
 /Jk727A1NbqbA==
Date: Sun, 16 Feb 2025 00:50:04 +0000
To: bug-gnu-emacs@HIDDEN, 75105 <at> debbugs.gnu.org, mattiasengdegard@HIDDEN,
 monnier@HIDDEN
From: Pip Cet <pipcet@HIDDEN>
Subject: Re: bug#75105: (cl-random -1.0e+INF)
Message-ID: <87ikpahfxl.fsf@HIDDEN>
In-Reply-To: <87seqb73aa.fsf@HIDDEN>
References: <87seqb73aa.fsf@HIDDEN>
Feedback-ID: 112775352:user:proton
X-Pm-Message-ID: de5ca5c2f784ec5486becb1cca964e20ce915fc2
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 75105
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

"Pip Cet via \"Bug reports for GNU Emacs, the Swiss army knife of text edit=
ors\"" <bug-gnu-emacs@HIDDEN> writes:

> The current behavior of (cl-random -1.0e+INF) is to return NaN with a
> probability of 1.1920928955078125e-07, and -1.0e+INF in the remaining
> cases.

Okay, so maybe I was wrong and that should be fixed.  This patch will
make cl-random behave consistently, though one could argue about some
cases:

(cl-random 0) involves a division by zero, as it should
(cl-random 1.0e+INF) returns 1.0e+INF, as it should
(cl-random 0.0) returns 0.0, but one could argue it should throw
(cl-random -0.0) should do the same as (cl-random -0.0) since negative
zero is a myth.

Updating the docstring would be nice, too.

From 22e59a481a7a1c2cbff349af0f6faa2f428981a8 Mon Sep 17 00:00:00 2001
From: Pip Cet <pipcet@HIDDEN>
Subject: [PATCH] Make cl-random behave consistently for unusual arguments
 (bug#75105)

The old behavior was for (cl-random -1.0e+INF) to return NaN in about
one of eight million calls, and -1.0e+INF otherwise.  Other unusual
arguments were handled inconsistently as well.

* lisp/emacs-lisp/cl-extra.el (cl-random): Handle nonnegative
arguments consistently, error for negative arguments.
* test/lisp/emacs-lisp/cl-extra-tests.el (cl-extra-test-random): New
test.
---
 lisp/emacs-lisp/cl-extra.el            | 20 +++++++++++++-------
 test/lisp/emacs-lisp/cl-extra-tests.el | 10 ++++++++++
 2 files changed, 23 insertions(+), 7 deletions(-)

diff --git a/lisp/emacs-lisp/cl-extra.el b/lisp/emacs-lisp/cl-extra.el
index 09470457d93..8c218ff9d7e 100644
--- a/lisp/emacs-lisp/cl-extra.el
+++ b/lisp/emacs-lisp/cl-extra.el
@@ -494,13 +494,19 @@ cl-random
     (let* ((i (cl-callf (lambda (x) (% (1+ x) 55)) (cl--random-state-i sta=
te)))
 =09   (j (cl-callf (lambda (x) (% (1+ x) 55)) (cl--random-state-j state)))
 =09   (n (aset vec i (logand 8388607 (- (aref vec i) (aref vec j))))))
-      (if (integerp lim)
-=09  (if (<=3D lim 512) (% n lim)
-=09    (if (> lim 8388607) (setq n (+ (ash n 9) (cl-random 512 state))))
-=09    (let ((mask 1023))
-=09      (while (< mask (1- lim)) (setq mask (1+ (+ mask mask))))
-=09      (if (< (setq n (logand n mask)) lim) n (cl-random lim state))))
-=09(* (/ n '8388608e0) lim)))))
+      (cond
+       ((natnump lim)
+=09(if (<=3D lim 512) (% n lim)
+=09  (if (> lim 8388607) (setq n (+ (ash n 9) (cl-random 512 state))))
+=09  (let ((mask 1023))
+=09    (while (< mask (1- lim)) (setq mask (1+ (+ mask mask))))
+=09    (if (< (setq n (logand n mask)) lim) n (cl-random lim state)))))
+       ((< 0 lim 1.0e+INF)
+        (* (/ n '8388608e0) lim))
+       ((< lim -0.0)
+        (error "negative limit supplied to cl-random"))
+       (t
+        lim)))))
=20
 ;;;###autoload
 (defun cl-make-random-state (&optional state)
diff --git a/test/lisp/emacs-lisp/cl-extra-tests.el b/test/lisp/emacs-lisp/=
cl-extra-tests.el
index 75533b36f29..d87c0bfec5d 100644
--- a/test/lisp/emacs-lisp/cl-extra-tests.el
+++ b/test/lisp/emacs-lisp/cl-extra-tests.el
@@ -348,4 +348,14 @@ cl-extra-test-tailp
     (should (cl-tailp l l))
     (should (not (cl-tailp '(4 5) l)))))
=20
+(ert-deftest cl-extra-test-random ()
+  (should-error (cl-random -1))
+  (should-error (cl-random -0.5))
+  (should-error (cl-random -1.0e+INF))
+  (should-error (cl-random 0))
+  (should (eql (cl-random 1) 0)))
+  (should (eql (cl-random 0.0) 0.0))
+  (should (=3D (cl-random -0.0) 0.0))
+  (should (=3D (cl-random 1.0e+INF) 1.0e+INF))
+
 ;;; cl-extra-tests.el ends here
--=20
2.48.1





Information forwarded to bug-gnu-emacs@HIDDEN:
bug#75105; Package emacs. Full text available.

Message received at submit <at> debbugs.gnu.org:


Received: (at submit) by debbugs.gnu.org; 16 Feb 2025 00:50:47 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sat Feb 15 19:50:47 2025
Received: from localhost ([127.0.0.1]:59035 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tjSrv-0004zX-6f
	for submit <at> debbugs.gnu.org; Sat, 15 Feb 2025 19:50:47 -0500
Received: from lists.gnu.org ([2001:470:142::17]:56686)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <pipcet@HIDDEN>)
 id 1tjSrs-0004z2-Cq
 for submit <at> debbugs.gnu.org; Sat, 15 Feb 2025 19:50:45 -0500
Received: from eggs.gnu.org ([2001:470:142:3::10])
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <pipcet@HIDDEN>)
 id 1tjSrR-0000va-Ap
 for bug-gnu-emacs@HIDDEN; Sat, 15 Feb 2025 19:50:20 -0500
Received: from mail-10629.protonmail.ch ([79.135.106.29])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <pipcet@HIDDEN>)
 id 1tjSrM-0004MM-4A
 for bug-gnu-emacs@HIDDEN; Sat, 15 Feb 2025 19:50:16 -0500
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=protonmail.com;
 s=protonmail3; t=1739667007; x=1739926207;
 bh=6Kxq8NXjDcf/xvJMoPZeHoGyUw8IJCZxbfBUaLiR5AU=;
 h=Date:To:From:Subject:Message-ID:In-Reply-To:References:
 Feedback-ID:From:To:Cc:Date:Subject:Reply-To:Feedback-ID:
 Message-ID:BIMI-Selector:List-Unsubscribe:List-Unsubscribe-Post;
 b=xH8M8ZL0zll4ib7PF4ah91FVbHfOmlT7pDGYMoEzVRMBe/qaypM8UvgiUJhP+b+Sz
 LbR8IUb6w32C7SV/kQgteNtd/9/L1l2VYseitAywL5PRx9IseAMH1xSpgGF5j1lbp9
 2Dj/Z/S2/oLH7h74jykaAoTGb2lTzRB+R0oCtiO0Jq+3sDJ+oZe8w3jmb/0GNbw/Pl
 R4bk2khw1zkIsKTbDc+aBbOr/mkp2JNpxLa4fm9Yd4dDpTaxTULUmW+nBdiCMHUgu5
 rrOaSOunYlN/c1uo9PDXryXbr3uc3030yObzNa5eJpxabWex2dQFOvp3w7aPZWZhm8
 /Jk727A1NbqbA==
Date: Sun, 16 Feb 2025 00:50:04 +0000
To: bug-gnu-emacs@HIDDEN, 75105 <at> debbugs.gnu.org, mattiasengdegard@HIDDEN,
 monnier@HIDDEN
From: Pip Cet <pipcet@HIDDEN>
Subject: Re: bug#75105: (cl-random -1.0e+INF)
Message-ID: <87ikpahfxl.fsf@HIDDEN>
In-Reply-To: <87seqb73aa.fsf@HIDDEN>
References: <87seqb73aa.fsf@HIDDEN>
Feedback-ID: 112775352:user:proton
X-Pm-Message-ID: de5ca5c2f784ec5486becb1cca964e20ce915fc2
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
Received-SPF: pass client-ip=79.135.106.29; envelope-from=pipcet@HIDDEN;
 helo=mail-10629.protonmail.ch
X-Spam_score_int: -20
X-Spam_score: -2.1
X-Spam_bar: --
X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,
 DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001,
 RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H5=0.001, RCVD_IN_MSPIKE_WL=0.001,
 RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001,
 SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-Spam-Score: 1.0 (+)
X-Debbugs-Envelope-To: submit
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -0.0 (/)

"Pip Cet via \"Bug reports for GNU Emacs, the Swiss army knife of text edit=
ors\"" <bug-gnu-emacs@HIDDEN> writes:

> The current behavior of (cl-random -1.0e+INF) is to return NaN with a
> probability of 1.1920928955078125e-07, and -1.0e+INF in the remaining
> cases.

Okay, so maybe I was wrong and that should be fixed.  This patch will
make cl-random behave consistently, though one could argue about some
cases:

(cl-random 0) involves a division by zero, as it should
(cl-random 1.0e+INF) returns 1.0e+INF, as it should
(cl-random 0.0) returns 0.0, but one could argue it should throw
(cl-random -0.0) should do the same as (cl-random -0.0) since negative
zero is a myth.

Updating the docstring would be nice, too.

From 22e59a481a7a1c2cbff349af0f6faa2f428981a8 Mon Sep 17 00:00:00 2001
From: Pip Cet <pipcet@HIDDEN>
Subject: [PATCH] Make cl-random behave consistently for unusual arguments
 (bug#75105)

The old behavior was for (cl-random -1.0e+INF) to return NaN in about
one of eight million calls, and -1.0e+INF otherwise.  Other unusual
arguments were handled inconsistently as well.

* lisp/emacs-lisp/cl-extra.el (cl-random): Handle nonnegative
arguments consistently, error for negative arguments.
* test/lisp/emacs-lisp/cl-extra-tests.el (cl-extra-test-random): New
test.
---
 lisp/emacs-lisp/cl-extra.el            | 20 +++++++++++++-------
 test/lisp/emacs-lisp/cl-extra-tests.el | 10 ++++++++++
 2 files changed, 23 insertions(+), 7 deletions(-)

diff --git a/lisp/emacs-lisp/cl-extra.el b/lisp/emacs-lisp/cl-extra.el
index 09470457d93..8c218ff9d7e 100644
--- a/lisp/emacs-lisp/cl-extra.el
+++ b/lisp/emacs-lisp/cl-extra.el
@@ -494,13 +494,19 @@ cl-random
     (let* ((i (cl-callf (lambda (x) (% (1+ x) 55)) (cl--random-state-i sta=
te)))
 =09   (j (cl-callf (lambda (x) (% (1+ x) 55)) (cl--random-state-j state)))
 =09   (n (aset vec i (logand 8388607 (- (aref vec i) (aref vec j))))))
-      (if (integerp lim)
-=09  (if (<=3D lim 512) (% n lim)
-=09    (if (> lim 8388607) (setq n (+ (ash n 9) (cl-random 512 state))))
-=09    (let ((mask 1023))
-=09      (while (< mask (1- lim)) (setq mask (1+ (+ mask mask))))
-=09      (if (< (setq n (logand n mask)) lim) n (cl-random lim state))))
-=09(* (/ n '8388608e0) lim)))))
+      (cond
+       ((natnump lim)
+=09(if (<=3D lim 512) (% n lim)
+=09  (if (> lim 8388607) (setq n (+ (ash n 9) (cl-random 512 state))))
+=09  (let ((mask 1023))
+=09    (while (< mask (1- lim)) (setq mask (1+ (+ mask mask))))
+=09    (if (< (setq n (logand n mask)) lim) n (cl-random lim state)))))
+       ((< 0 lim 1.0e+INF)
+        (* (/ n '8388608e0) lim))
+       ((< lim -0.0)
+        (error "negative limit supplied to cl-random"))
+       (t
+        lim)))))
=20
 ;;;###autoload
 (defun cl-make-random-state (&optional state)
diff --git a/test/lisp/emacs-lisp/cl-extra-tests.el b/test/lisp/emacs-lisp/=
cl-extra-tests.el
index 75533b36f29..d87c0bfec5d 100644
--- a/test/lisp/emacs-lisp/cl-extra-tests.el
+++ b/test/lisp/emacs-lisp/cl-extra-tests.el
@@ -348,4 +348,14 @@ cl-extra-test-tailp
     (should (cl-tailp l l))
     (should (not (cl-tailp '(4 5) l)))))
=20
+(ert-deftest cl-extra-test-random ()
+  (should-error (cl-random -1))
+  (should-error (cl-random -0.5))
+  (should-error (cl-random -1.0e+INF))
+  (should-error (cl-random 0))
+  (should (eql (cl-random 1) 0)))
+  (should (eql (cl-random 0.0) 0.0))
+  (should (=3D (cl-random -0.0) 0.0))
+  (should (=3D (cl-random 1.0e+INF) 1.0e+INF))
+
 ;;; cl-extra-tests.el ends here
--=20
2.48.1





Information forwarded to bug-gnu-emacs@HIDDEN:
bug#75105; Package emacs. Full text available.
Severity set to 'wishlist' from 'normal' Request was from Stefan Kangas <stefankangas@HIDDEN> to control <at> debbugs.gnu.org. Full text available.

Message received at submit <at> debbugs.gnu.org:


Received: (at submit) by debbugs.gnu.org; 25 Dec 2024 23:27:24 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Wed Dec 25 18:27:24 2024
Received: from localhost ([127.0.0.1]:39353 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tQami-0007Zs-2V
	for submit <at> debbugs.gnu.org; Wed, 25 Dec 2024 18:27:24 -0500
Received: from lists.gnu.org ([209.51.188.17]:34934)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <pipcet@HIDDEN>) id 1tQamg-0007Zk-7r
 for submit <at> debbugs.gnu.org; Wed, 25 Dec 2024 18:27:22 -0500
Received: from eggs.gnu.org ([2001:470:142:3::10])
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <pipcet@HIDDEN>)
 id 1tQamf-0006gA-MY
 for bug-gnu-emacs@HIDDEN; Wed, 25 Dec 2024 18:27:22 -0500
Received: from mail-40133.protonmail.ch ([185.70.40.133])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <pipcet@HIDDEN>)
 id 1tQame-0002JT-2k
 for bug-gnu-emacs@HIDDEN; Wed, 25 Dec 2024 18:27:21 -0500
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=protonmail.com;
 s=protonmail3; t=1735169236; x=1735428436;
 bh=RO98GxvQonDRL3UTmwq1t6Owo49fSGVRYN/hX+46xWY=;
 h=Date:To:From:Subject:Message-ID:Feedback-ID:From:To:Cc:Date:
 Subject:Reply-To:Feedback-ID:Message-ID:BIMI-Selector:
 List-Unsubscribe:List-Unsubscribe-Post;
 b=CN2gTq5yo5f9jaTillpN1ZmLzqV2IKKyU9omIOtS7jaYbw5KE1pSPq9nEpSI9rZzw
 Y/IWnB6ouq1qDnbBmijSA85r4UoFmoVW6yzmslSWqGbUh5UQuZiVCeRXJAL2YrRe8w
 eFMo6eRQ4+n1P9mxhohsf1R8Giwff5OotG+Yank0f8M0uQrAd9+WtyjANYZkzMxnvD
 Gf895alD6cSBjkUfVHRr3A/CwaORGBKo3MUO6VIi+0W2pu5bOq/IVxlo7kVETO5FHm
 kYFFKCQdzsRw3x9bU7kvnOkKMX7doT4AQ2Ke05Y353dFL3lDA5lFl0js1u9CHpAF9g
 3m80vXNteT+tQ==
Date: Wed, 25 Dec 2024 23:27:09 +0000
To: bug-gnu-emacs@HIDDEN,
 =?utf-8?Q?Mattias_Engdeg=C3=A5rd?= <mattiasengdegard@HIDDEN>,
 Stefan Monnier <monnier@HIDDEN>
From: Pip Cet <pipcet@HIDDEN>
Subject: (cl-random -1.0e+INF)
Message-ID: <87seqb73aa.fsf@HIDDEN>
Feedback-ID: 112775352:user:proton
X-Pm-Message-ID: bd07054c7c81eab97a4d3ebde771849147a8b2de
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
Received-SPF: pass client-ip=185.70.40.133; envelope-from=pipcet@HIDDEN;
 helo=mail-40133.protonmail.ch
X-Spam_score_int: -20
X-Spam_score: -2.1
X-Spam_bar: --
X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,
 DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001,
 RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001,
 RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001,
 SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-Spam-Score: -1.3 (-)
X-Debbugs-Envelope-To: submit
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -2.3 (--)

The current behavior of (cl-random -1.0e+INF) is to return NaN with a
probability of 1.1920928955078125e-07, and -1.0e+INF in the remaining
cases.

There are at least two reasonable things cl-random can return for a
negative argument.  cl-random implements both, returning a float with
negative sign or a nonnegative integer.

There are at least two reasonable things cl-random can do in response to
a zero argument.  cl-random implements three of them:

(cl-random 0.0) is 0.0
(cl-random -0.0) is -0.0
(cl-random 0) throws an error

While "(while (not (isnan (cl-random -1.0e+INF))))" is an interesting
benchmark, its behavior may be somewhat surprising.

As this behavior has been in place since at least 1993 (when the
function was called random*), users may rely on it, and only the
docstring should be changed.





Acknowledgement sent to Pip Cet <pipcet@HIDDEN>:
New bug report received and forwarded. Copy sent to bug-gnu-emacs@HIDDEN. Full text available.
Report forwarded to bug-gnu-emacs@HIDDEN:
bug#75105; Package emacs. Full text available.
Please note: This is a static page, with minimal formatting, updated once a day.
Click here to see this page with the latest information and nicer formatting.
Last modified: Mon, 17 Feb 2025 18:30:02 UTC

GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997 nCipher Corporation Ltd, 1994-97 Ian Jackson.