From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail2-relais-roc.national.inria.fr (mail2-relais-roc.national.inria.fr [192.134.164.83]) by sympa.inria.fr (Postfix) with ESMTPS id D582A7F332 for ; Thu, 28 Nov 2019 10:27:20 +0100 (CET) Authentication-Results: mail2-smtp-roc.national.inria.fr; spf=None smtp.pra=basile@starynkevitch.net; spf=Pass smtp.mailfrom=basile@starynkevitch.net; spf=None smtp.helo=postmaster@relay8-d.mail.gandi.net Received-SPF: None (mail2-smtp-roc.national.inria.fr: no sender authenticity information available from domain of basile@starynkevitch.net) identity=pra; client-ip=217.70.183.201; receiver=mail2-smtp-roc.national.inria.fr; envelope-from="basile@starynkevitch.net"; x-sender="basile@starynkevitch.net"; x-conformance=sidf_compatible Received-SPF: Pass (mail2-smtp-roc.national.inria.fr: domain of basile@starynkevitch.net designates 217.70.183.201 as permitted sender) identity=mailfrom; client-ip=217.70.183.201; receiver=mail2-smtp-roc.national.inria.fr; envelope-from="basile@starynkevitch.net"; x-sender="basile@starynkevitch.net"; x-conformance=sidf_compatible; x-record-type="v=spf1" Received-SPF: None (mail2-smtp-roc.national.inria.fr: no sender authenticity information available from domain of postmaster@relay8-d.mail.gandi.net) identity=helo; client-ip=217.70.183.201; receiver=mail2-smtp-roc.national.inria.fr; envelope-from="basile@starynkevitch.net"; x-sender="postmaster@relay8-d.mail.gandi.net"; x-conformance=sidf_compatible IronPort-PHdr: =?us-ascii?q?9a23=3AquQ5ABa6RaMryTc/rV6zJUD/LSx+4OfEezUN459i?= =?us-ascii?q?sYplN5qZr8SybnLW6fgltlLVR4KTs6sC17ON9fm+BiQp2tWoiDg6aptCVhsI24?= =?us-ascii?q?09vjcLJ4q7M3D9N+PgdCcgHc5PBxdP9nC/NlVJSo6lPwWB6nK94iQPFRrhKAF7?= =?us-ascii?q?Ovr6GpLIj8Swyuu+54Dfbx9HiTagb75+Ngi6oATTu8ILnYZsN6E9xwfTrHBVYe?= =?us-ascii?q?pW32RoJVySnxb4+Mi9+YNo/jpTtfw86cNOSL32cKskQ7NWCjQmKH0169bwtRbf?= =?us-ascii?q?VwuP52ATXXsQnxFVHgXK9hD6XpP2sivnqupw3TSRMMPqQbwoXzmp8rxmQwH0hi?= =?us-ascii?q?gZKzE58XnXis1ug6JdvBKhvAF0z4rNbI2IKPZyYqbRcNUHTmRDQ8lRTTRMDZ+8?= =?us-ascii?q?YYUBEeQOMuVWoZTzqFYVtxSyGROhCfnzxjJShHL727Ax3eQ7EQHB2QwtB8kBv2?= =?us-ascii?q?7PrNX0MKcdT/u4zLLUzTrZdfNX2TH96IvWfRA/oPGMQa5/ccrLxUkpCQzFkkib?= =?us-ascii?q?pIv+MDyPzeQNsmyb4PR7WOK0l24osRtxozipxscvlIbJmIMVykzY+iV52oo1I8?= =?us-ascii?q?O3SFJibNOiDZBetDmaOpNoTs8/QWxkoiQ3xqEctZKmfyUHxo4rywDDZ/CadYWD?= =?us-ascii?q?/wjtW/yLIThigXJoYLK/iAi28Uin0uD8TNe70FJQoStFkdTAr20C2wbW6sedS/?= =?us-ascii?q?t9+l2t2TmV2ADV9+5EIFo4lazFJJ492rIwl5wTvlrfHiLuhkn6ka2bel8m9+S0?= =?us-ascii?q?8ejrf7brq5GGO4Nqlg3yL7wimsmlDuQ5NggOUXKb+eO51LD75kL2Wq5Kjvwykq?= =?us-ascii?q?bHq53aPtgbqbSjAw5V1IYj6AiwDymn0NQEgXYHLEhJeBSZgIj1I13OOuz3De+j?= =?us-ascii?q?g1Swlzdm3+zJMafkApXJN3TDlLbhfa1h60NH0woyzdVf54pOBb0bIfLzXFXxtN?= =?us-ascii?q?3CARMjPQy02f7tCM9h2YMGRWKPHqiZPbvcsV+Q4eIvP/WMZI4LtzbnMPUk5v/u?= =?us-ascii?q?jXoill8HZ6alx5oXaHaiHvRnOUqVe3Tsgs1SWVsN6yQkReplj1yZZgZUe2qzUr?= =?us-ascii?q?h0sj8hAYStCobYAJiqnKCA0T2TH5tMZ2kABEraQlnycIDRUf4XaSafCtR9myYV?= =?us-ascii?q?U7usVY493hHosgLmg+5tJ/HV/iAwro7qzslz5ODNlA059XpyAtjLgDLFdH19gm?= =?us-ascii?q?5dH2x+56t4u0Eojw7bifEl0cwdLsRa4rZyail/NZPYyLYnWcr/XgvQLpKFDlOv?= =?us-ascii?q?Q9HgDjg3QtN3xdISMR4kR4eSyyvb1i/vOIc70qSRDcVloLnA1mLgIcVw1Xfa36?= =?us-ascii?q?lniVQ6EJMWZD+Ww5Vn/g2WPLbn1kCQlqKkb6MZhX+f73uK13uIv0xGURJ7UePD?= =?us-ascii?q?UGxNP0Y=3D?= X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: =?us-ascii?q?A0DNAQCRkd9dhsm3RtllHgELHIUANikyK?= =?us-ascii?q?oQrkG6FIYogjBEJAQMBDC8BAYRATgEIgSwcBwEENBMCEAEBBAEBAQIBAgMEARM?= =?us-ascii?q?BAQEICwsIKYVKgikSKQGDFwREDhsEAT0CXxODIoJ8si1/M4kiI4EPgTaFG4Q2g?= =?us-ascii?q?kUaPgGBQYE7CYJgPodZgl4EjTORdY4icAeCMYY5j0aCNIdrj3WlYUWCX4FpgXp?= =?us-ascii?q?7CjuCbFARFIsGji1AAzCRRwEB?= X-IPAS-Result: =?us-ascii?q?A0DNAQCRkd9dhsm3RtllHgELHIUANikyKoQrkG6FIYogjBE?= =?us-ascii?q?JAQMBDC8BAYRATgEIgSwcBwEENBMCEAEBBAEBAQIBAgMEARMBAQEICwsIKYVKg?= =?us-ascii?q?ikSKQGDFwREDhsEAT0CXxODIoJ8si1/M4kiI4EPgTaFG4Q2gkUaPgGBQYE7CYJ?= =?us-ascii?q?gPodZgl4EjTORdY4icAeCMYY5j0aCNIdrj3WlYUWCX4FpgXp7CjuCbFARFIsGj?= =?us-ascii?q?i1AAzCRRwEB?= X-IronPort-AV: E=Sophos;i="5.69,253,1571695200"; d="scan'208,217";a="413920645" X-MGA-submission: =?us-ascii?q?MDHWTCimQGIMMX7hXzGAGxOx99uMWEYAqhhNas?= =?us-ascii?q?NET3lMZeYEVTeA9zSllTd/DfLTjVuBJi34Wj7WL3StyIplnruIM85ZvL?= =?us-ascii?q?xn0PWNdjrxi5hYEfBg99sIkoze/BQVaEi1t/FN8C8GbwGY+010ctnNG3?= =?us-ascii?q?MRgVBYS06fwRopmLZjiH17aw=3D=3D?= Received: from relay8-d.mail.gandi.net ([217.70.183.201]) by mail2-smtp-roc.national.inria.fr with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 28 Nov 2019 10:27:20 +0100 Received: from sogo10.sd4.0x35.net (sogo10.sd4.0x35.net [10.200.201.60]) (Authenticated sender: basile@starynkevitch.net) by relay8-d.mail.gandi.net (Postfix) with ESMTPA id EDFA81BF20E; Thu, 28 Nov 2019 09:27:17 +0000 (UTC) Content-Type: multipart/alternative; boundary="----=_=-_OpenGroupware_org_NGMime-23791-1574933237.884173-22------" From: =?utf-8?q?basile=40starynkevitch=2Enet?= X-Forward: 127.0.0.1 Date: Thu, 28 Nov 2019 10:27:17 +0100 Cc: caml-list@inria.fr To: =?utf-8?q?Fran=C3=A7ois_Pottier?= MIME-Version: 1.0 Message-ID: <5cef-5ddf9300-35-4e2fd700@138599352> User-Agent: SOGoMail 4.0.8 Subject: Re: [Caml-list] zarith: how to pick a random integer? ------=_=-_OpenGroupware_org_NGMime-23791-1574933237.884173-22------ Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Content-Length: 1059 On Wednesday, November 27, 2019 22:31 CET, Fran=C3=A7ois Pottier wrote: =C2=A0 Hello, I am using zarith and would like to pick a random integer comprised between 0 and some bound. I would like a function Z.random of type Z.t -> Z.t, but this function seems to be missing, and I am not sure how to program it in an efficient and correct way. Any suggestions would be welcome. Thanks! =C2=A0 I tend to believe that the following idea might be good, but please check w= ith real probability experts. I definitely am not one (but one of my best c= olleagues is one). Let B be the bound. You take a random number modulus 2*B. Let R be that number You modelize the [0;B[ interval as a ring of numbers. For example if B is 5= : 0 -> 1 -> 2 -> 3 -> 4 -> 0 -> 1 -> .... ad infinitium You memoize the previously given random number N On that ring, you go R steps forward and obtain P. That is your new random = number and on the next iteration the R would be that P But check with an expert, I am not one -- Basile =C2=A0 ------=_=-_OpenGroupware_org_NGMime-23791-1574933237.884173-22------ Content-Type: text/html; charset=utf-8 Content-Transfer-Encoding: quoted-printable Content-Length: 1385
On Wednesday, November 27, 2019 22:31 CET, Fran=C3=A7ois Pottie= r <francois.pottier@inria.fr> wrote:
 

Hello,
I am using zarith and would like to pick a random integer
com= prised between 0 and some bound. I would like a function
Z.random of t= ype Z.t -> Z.t, but this function seems to be
missing, and I am not= sure how to program it in an efficient
and correct way. Any suggestio= ns would be welcome. Thanks!

 

I tend to = believe that the following idea might be good, but please check with real p= robability experts. I definitely am not one (but one of my best colleagues = is one).

Let B be the bound.

You take a random number= modulus 2*B. Let R be that number

You modelize the [0;B[ interv= al as a ring of numbers. For example if B is 5 : 0 -> 1 -> 2 -> 3 = -> 4 -> 0 -> 1 -> .... ad infinitium


You memoi= ze the previously given random number N

On that ring, you go R s= teps forward and obtain P. That is your new random number and on the next i= teration the R would be that P

But check with an expert, I am no= t one

--

Basile
  ------=_=-_OpenGroupware_org_NGMime-23791-1574933237.884173-22--------