bug-apl
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Bug-apl] Floating-point random number function


From: Christian Robert
Subject: Re: [Bug-apl] Floating-point random number function
Date: Fri, 30 Jun 2017 19:20:19 -0400
User-agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Thunderbird/52.2.1

You are right !

Xtian.

On 2017-06-30 16:48, Frederick Pitts wrote:
Xtian,

        Actually the function you present returns the type of the
argument, not the prototype, as per

                Type <=> ↑0ρ⊂R

on page 46 of IBM's "APL2 Programming: Language Reference".  The
prototype is the type of the first element of R, i.e.,

                Prototype <=> ↑0⍴⊂↑R

Regards,

Fred

On Fri, 2017-06-30 at 00:33 -0400, Christian Robert wrote:
I don't know, your "(res+V×0)" is probably the way to go for that
purpose, I'm not an expert but I understand what you mean.

I have an alias defined as:

     proto←{↑0⍴⊂ ⍵}

that give me the prototype of the argument (use with: 24 QuadCR proto
w). It will probably not help you but good to know.


Xtian.

On 2017-06-30 00:24, Elias Mårtenson wrote:
The purpose of it is to preserve the structure of the argument,
while setting all values to MAXINT.

Is there a better way to achieve this?

Regards,
Elias

On 30 June 2017 at 12:21, Christian Robert <address@hidden
l.ca <mailto:address@hidden>> wrote:

     On 2017-06-30 00:19, Elias Mårtenson wrote:

         Thanks. I'll stick with this for now then.

         How would (res+V×0) wrap around, by the way?


     Bad first reading, (res+V×0) does nothing, it add 0 to "res".
How is it usefull ?

     Xtian.



         On 30 June 2017 at 12:17, Christian Robert <christian.rober
address@hidden <mailto:address@hidden> <mailto:christian
address@hidden <mailto:address@hidden>>> wrote:

              I think this is the best you can get, about 62 bits of
randomness.

                     (64⍴2) ⊤⎕syl[20;2] ⍝ the largest 64 bits
integer supported by gnu-apl
              0 1 1 1 1 1 1 1 1 0 1 0 1 1 0 0 1 1 1 1 0 1 1 1 0 1 0
0 0 0 0 1 1 0 0 1 1 1 0 1 1 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0

              so, it's a bit less than 63 bits, say 62 bits for
safety is Ok.

              Note that (res+V×0) may wrap around.

              Xtian.

              On 2017-06-29 23:23, Elias Mårtenson wrote:

                  I had a need to have a function that does the same
as monadic ?, but with the difference that the resulting numbers
not be integers, but floating point.

                  Now, here's my attempt at creating such a
function, I'd like to know if this is the best way to achieve what
I need:

                  ∇ r←*hrRand* V ;res
                      ⍝⍝ Like monadic ?, but returns floating point
numbers
                      res ← ⎕SYL[19+⎕IO;1+⎕IO]
                      r ← V × res÷⍨ ?res+V×0
                  ∇

                  Example:

                  *      hrRand 3 2 ⍴ 10 100 5 (3 4 (2 2⍴5)) 1000*
                  ┏→━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
                  ↓ 4.138685128 <tel:4.138685128> <tel:4.138685128
<tel:4.138685128>>
   54.55782413 ┃
                  ┃  0.4543486424           ┏→━━━━━━━━━━━━━━━━━━━━━━
━━━━━━━━━━━━━━━━━━━━━━━━━━┓┃
                  ┃                         ┃2.024528001
<tel:2.024528001> <tel:2.024528001 <tel:2.024528001>> 2.772781338
┏→━━━━━━━━━━━━━━━━━━━━━━┓┃┃
                  ┃                         ┃
  ↓3.185551114 <tel:3.185551114> <tel:3.185551114 <tel:3.185551114>>
3.13571477 ┃┃┃
                  ┃                         ┃
  ┃1.204617876 4 <tel:1.204617876%204>
<tel:204617876%204>.396324338┃┃┃
                  ┃                         ┃
  ┗━━━━━━━━━━━━━━━━━━━━━━━┛┃┃
                  ┃                         ┗∊━━━━━━━━━━━━━━━━━━━━━━
━━━━━━━━━━━━━━━━━━━━━━━━━━┛┃
                  ┃634.0902523
                 9.353801479┃
                  ┗∊∊━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
━━━━━━━━━━━━━━━━━━━━━━━━━━━┛

                  Regards,
                  Elias




reply via email to

[Prev in Thread] Current Thread [Next in Thread]