tasks a-s
This commit is contained in:
parent
47bf37c096
commit
b83f433714
12433 changed files with 156208 additions and 123 deletions
3
Task/Random-numbers/0DESCRIPTION
Normal file
3
Task/Random-numbers/0DESCRIPTION
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
The goal of this task is to generate a collection filled with 1000 normally distributed random (or pseudorandom) numbers with a mean of 1.0 and a [[wp:Standard_deviation|standard deviation]] of 0.5
|
||||
|
||||
Many libraries only generate uniformly distributed random numbers. If so, use [[wp:Normal_distribution#Generating_values_from_normal_distribution|this formula]] to convert them to a normal distribution.
|
||||
4
Task/Random-numbers/1META.yaml
Normal file
4
Task/Random-numbers/1META.yaml
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
---
|
||||
category:
|
||||
- Probability and statistics
|
||||
note: Basic language learning
|
||||
13
Task/Random-numbers/ALGOL-68/random-numbers.alg
Normal file
13
Task/Random-numbers/ALGOL-68/random-numbers.alg
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
PROC random normal = REAL: # normal distribution, centered on 0, std dev 1 #
|
||||
(
|
||||
sqrt(-2*log(random)) * cos(2*pi*random)
|
||||
);
|
||||
|
||||
test:(
|
||||
[1000]REAL rands;
|
||||
FOR i TO UPB rands DO
|
||||
rands[i] := 1 + random normal/2
|
||||
OD;
|
||||
INT limit=10;
|
||||
printf(($"("n(limit-1)(-d.6d",")-d.5d" ... )"$, rands[:limit]))
|
||||
)
|
||||
1
Task/Random-numbers/AWK/random-numbers.awk
Normal file
1
Task/Random-numbers/AWK/random-numbers.awk
Normal file
|
|
@ -0,0 +1 @@
|
|||
$ awk 'func r(){return sqrt(-2*log(rand()))*cos(6.2831853*rand())}BEGIN{for(i=0;i<1000;i++)s=s" "1+0.5*r();print s}'
|
||||
23
Task/Random-numbers/Ada/random-numbers.ada
Normal file
23
Task/Random-numbers/Ada/random-numbers.ada
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
with Ada.Numerics; use Ada.Numerics;
|
||||
with Ada.Numerics.Float_Random; use Ada.Numerics.Float_Random;
|
||||
with Ada.Numerics.Elementary_Functions; use Ada.Numerics.Elementary_Functions;
|
||||
|
||||
procedure Normal_Random is
|
||||
function Normal_Distribution
|
||||
( Seed : Generator;
|
||||
Mu : Float := 1.0;
|
||||
Sigma : Float := 0.5
|
||||
) return Float is
|
||||
begin
|
||||
return
|
||||
Mu + (Sigma * Sqrt (-2.0 * Log (Random (Seed), 10.0)) * Cos (2.0 * Pi * Random (Seed)));
|
||||
end Normal_Distribution;
|
||||
|
||||
Seed : Generator;
|
||||
Distribution : array (1..1_000) of Float;
|
||||
begin
|
||||
Reset (Seed);
|
||||
for I in Distribution'Range loop
|
||||
Distribution (I) := Normal_Distribution (Seed);
|
||||
end loop;
|
||||
end Normal_Random;
|
||||
15
Task/Random-numbers/AutoHotkey/random-numbers.ahk
Normal file
15
Task/Random-numbers/AutoHotkey/random-numbers.ahk
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
Loop 40
|
||||
R .= RandN(1,0.5) "`n" ; mean = 1.0, standard deviation = 0.5
|
||||
MsgBox %R%
|
||||
|
||||
RandN(m,s) { ; Normally distributed random numbers of mean = m, std.dev = s by Box-Muller method
|
||||
Static i, Y
|
||||
If (i := !i) { ; every other call
|
||||
Random U, 0, 1.0
|
||||
Random V, 0, 6.2831853071795862
|
||||
U := sqrt(-2*ln(U))*s
|
||||
Y := m + U*sin(V)
|
||||
Return m + U*cos(V)
|
||||
}
|
||||
Return Y
|
||||
}
|
||||
11
Task/Random-numbers/BBC-BASIC/random-numbers.bbc
Normal file
11
Task/Random-numbers/BBC-BASIC/random-numbers.bbc
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
DIM array(999)
|
||||
FOR number% = 0 TO 999
|
||||
array(number%) = 1.0 + 0.5 * SQR(-2*LN(RND(1))) * COS(2*PI*RND(1))
|
||||
NEXT
|
||||
|
||||
mean = SUM(array()) / (DIM(array(),1) + 1)
|
||||
array() -= mean
|
||||
stdev = MOD(array()) / SQR(DIM(array(),1) + 1)
|
||||
|
||||
PRINT "Mean = " ; mean
|
||||
PRINT "Standard deviation = " ; stdev
|
||||
27
Task/Random-numbers/C++/random-numbers-1.cpp
Normal file
27
Task/Random-numbers/C++/random-numbers-1.cpp
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
#include <cstdlib> // for rand
|
||||
#include <cmath> // for atan, sqrt, log, cos
|
||||
#include <algorithm> // for generate_n
|
||||
|
||||
double const pi = 4*std::atan(1.0);
|
||||
|
||||
// simple functor for normal distribution
|
||||
class normal_distribution
|
||||
{
|
||||
public:
|
||||
normal_distribution(double m, double s): mu(m), sigma(s) {}
|
||||
double operator() const // returns a single normally distributed number
|
||||
{
|
||||
double r1 = (std::rand() + 1.0)/(RAND_MAX + 1.0); // gives equal distribution in (0, 1]
|
||||
double r2 = (std::rand() + 1.0)/(RAND_MAX + 1.0);
|
||||
return mu + sigma * std::sqrt(-2*std::log(r1))*std::cos(2*pi*r2);
|
||||
}
|
||||
private:
|
||||
const double mu, sigma;
|
||||
};
|
||||
|
||||
int main()
|
||||
{
|
||||
double array[1000];
|
||||
std::generate_n(array, 1000, normal_distribution(1.0, 0.5));
|
||||
return 0;
|
||||
}
|
||||
20
Task/Random-numbers/C++/random-numbers-2.cpp
Normal file
20
Task/Random-numbers/C++/random-numbers-2.cpp
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
#include <vector>
|
||||
#include "boost/random.hpp"
|
||||
#include "boost/generator_iterator.hpp"
|
||||
#include <boost/random/normal_distribution.hpp>
|
||||
#include <algorithm>
|
||||
|
||||
typedef boost::mt19937 RNGType; ///< mersenne twister generator
|
||||
|
||||
int main() {
|
||||
RNGType rng;
|
||||
boost::normal_distribution<> rdist(1.0,0.5); /**< normal distribution
|
||||
with mean of 1.0 and standard deviation of 0.5 */
|
||||
|
||||
boost::variate_generator< RNGType, boost::normal_distribution<> >
|
||||
get_rand(rng, rdist);
|
||||
|
||||
std::vector<double> v(1000);
|
||||
generate(v.begin(),v.end(),get_rand);
|
||||
return 0;
|
||||
}
|
||||
17
Task/Random-numbers/C++/random-numbers-3.cpp
Normal file
17
Task/Random-numbers/C++/random-numbers-3.cpp
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
#include <random>
|
||||
#include <functional>
|
||||
#include <vector>
|
||||
#include <algorithm>
|
||||
using namespace std;
|
||||
|
||||
int main()
|
||||
{
|
||||
random_device seed;
|
||||
mt19937 engine(seed());
|
||||
normal_distribution<> dist(1.0, 0.5);
|
||||
auto rnd = bind(dist, engine);
|
||||
|
||||
vector<double> v(1000);
|
||||
generate(v.begin(), v.end(), rnd);
|
||||
return 0;
|
||||
}
|
||||
4
Task/Random-numbers/C-sharp/random-numbers-1.cs
Normal file
4
Task/Random-numbers/C-sharp/random-numbers-1.cs
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
private static double randomNormal()
|
||||
{
|
||||
return Math.Cos(2 * Math.PI * tRand.NextDouble()) * Math.Sqrt(-2 * Math.Log(tRand.NextDouble()));
|
||||
}
|
||||
27
Task/Random-numbers/C-sharp/random-numbers-2.cs
Normal file
27
Task/Random-numbers/C-sharp/random-numbers-2.cs
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
static Random tRand = new Random();
|
||||
|
||||
static void Main(string[] args)
|
||||
{
|
||||
double[] a = new double[1000];
|
||||
|
||||
double tAvg = 0;
|
||||
for (int x = 0; x < a.Length; x++)
|
||||
{
|
||||
a[x] = randomNormal() / 2 + 1;
|
||||
tAvg += a[x];
|
||||
}
|
||||
|
||||
tAvg /= a.Length;
|
||||
Console.WriteLine("Average: " + tAvg.ToString());
|
||||
|
||||
double s = 0;
|
||||
for (int x = 0; x < a.Length; x++)
|
||||
{
|
||||
s += Math.Pow((a[x] - tAvg), 2);
|
||||
}
|
||||
s = Math.Sqrt(s / 1000);
|
||||
|
||||
Console.WriteLine("Standard Deviation: " + s.ToString());
|
||||
|
||||
Console.ReadLine();
|
||||
}
|
||||
22
Task/Random-numbers/C/random-numbers.c
Normal file
22
Task/Random-numbers/C/random-numbers.c
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
#include <stdlib.h>
|
||||
#include <math.h>
|
||||
#ifndef M_PI
|
||||
#define M_PI 3.14159265358979323846
|
||||
#endif
|
||||
|
||||
double drand() /* uniform distribution, (0..1] */
|
||||
{
|
||||
return (rand()+1.0)/(RAND_MAX+1.0);
|
||||
}
|
||||
double random_normal() /* normal distribution, centered on 0, std dev 1 */
|
||||
{
|
||||
return sqrt(-2*log(drand())) * cos(2*M_PI*drand());
|
||||
}
|
||||
int main()
|
||||
{
|
||||
int i;
|
||||
double rands[1000];
|
||||
for (i=0; i<1000; i++)
|
||||
rands[i] = 1.0 + 0.5*random_normal();
|
||||
return 0;
|
||||
}
|
||||
4
Task/Random-numbers/Clojure/random-numbers.clj
Normal file
4
Task/Random-numbers/Clojure/random-numbers.clj
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
(import '(java.util Random))
|
||||
(def normals
|
||||
(let [r (Random.)]
|
||||
(take 1000 (repeatedly #(-> r .nextGaussian (* 0.5) (+ 1.0))))))
|
||||
2
Task/Random-numbers/Common-Lisp/random-numbers.lisp
Normal file
2
Task/Random-numbers/Common-Lisp/random-numbers.lisp
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
(loop for i from 1 to 1000
|
||||
collect (1+ (* (sqrt (* -2 (log (random 1.0)))) (cos (* 2 pi (random 1.0))) 0.5)))
|
||||
24
Task/Random-numbers/D/random-numbers-1.d
Normal file
24
Task/Random-numbers/D/random-numbers-1.d
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
import std.stdio, std.random, std.math;
|
||||
|
||||
struct NormalRandom {
|
||||
double mean, stdDev;
|
||||
|
||||
// needed because it also defines an opCall
|
||||
this(in double mean_, in double stdDev_) pure nothrow {
|
||||
this.mean = mean_;
|
||||
this.stdDev = stdDev_;
|
||||
}
|
||||
|
||||
double opCall() const /*nothrow*/ {
|
||||
immutable double r1 = uniform(0.0, 1.0);
|
||||
immutable double r2 = uniform(0.0, 1.0);
|
||||
return mean + stdDev * sqrt(-2 * log(r1)) * cos(2 * PI * r2);
|
||||
}
|
||||
}
|
||||
|
||||
void main() {
|
||||
double[1000] array;
|
||||
auto nrnd = NormalRandom(1.0, 0.5);
|
||||
foreach (ref x; array)
|
||||
x = nrnd();
|
||||
}
|
||||
10
Task/Random-numbers/D/random-numbers-2.d
Normal file
10
Task/Random-numbers/D/random-numbers-2.d
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
import tango.math.random.Random;
|
||||
|
||||
void main() {
|
||||
double[1000] list;
|
||||
auto r = new Random();
|
||||
foreach (ref l; list) {
|
||||
r.normalSource!(double)()(l);
|
||||
l = 1.0 + 0.5 * l;
|
||||
}
|
||||
}
|
||||
5
Task/Random-numbers/DWScript/random-numbers.dwscript
Normal file
5
Task/Random-numbers/DWScript/random-numbers.dwscript
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
var values : array [0..999] of Float;
|
||||
var i : Integer;
|
||||
|
||||
for i := values.Low to values.High do
|
||||
values := RandG(1, 0.5);
|
||||
19
Task/Random-numbers/Delphi/random-numbers.delphi
Normal file
19
Task/Random-numbers/Delphi/random-numbers.delphi
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
program Randoms;
|
||||
|
||||
{$APPTYPE CONSOLE}
|
||||
|
||||
uses
|
||||
Math;
|
||||
|
||||
var
|
||||
Values: array[0..999] of Double;
|
||||
I: Integer;
|
||||
|
||||
begin
|
||||
// Randomize; Commented to obtain reproducible results
|
||||
for I:= Low(Values) to High(Values) do
|
||||
Values[I]:= RandG(1.0, 0.5); // Mean = 1.0, StdDev = 0.5
|
||||
Writeln('Mean = ', Mean(Values):6:4);
|
||||
Writeln('Std Deviation = ', StdDev(Values):6:4);
|
||||
Readln;
|
||||
end.
|
||||
1
Task/Random-numbers/E/random-numbers.e
Normal file
1
Task/Random-numbers/E/random-numbers.e
Normal file
|
|
@ -0,0 +1 @@
|
|||
accum [] for _ in 1..1000 { _.with(entropy.nextGaussian()) }
|
||||
95
Task/Random-numbers/Eiffel/random-numbers.e
Normal file
95
Task/Random-numbers/Eiffel/random-numbers.e
Normal file
|
|
@ -0,0 +1,95 @@
|
|||
class
|
||||
APPLICATION
|
||||
|
||||
inherit
|
||||
ARGUMENTS
|
||||
|
||||
create
|
||||
make
|
||||
|
||||
feature {NONE} -- Initialization
|
||||
|
||||
l_time: TIME
|
||||
l_seed: INTEGER
|
||||
math:DOUBLE_MATH
|
||||
rnd:RANDOM
|
||||
Size:INTEGER
|
||||
once
|
||||
Result:= 1000
|
||||
end
|
||||
|
||||
make
|
||||
-- Run application.
|
||||
local
|
||||
ergebnis:ARRAY[DOUBLE]
|
||||
tavg: DOUBLE
|
||||
x: INTEGER
|
||||
tmp: DOUBLE
|
||||
text : STRING
|
||||
|
||||
do
|
||||
-- initialize random generator
|
||||
create l_time.make_now
|
||||
l_seed := l_time.hour
|
||||
l_seed := l_seed * 60 + l_time.minute
|
||||
l_seed := l_seed * 60 + l_time.second
|
||||
l_seed := l_seed * 1000 + l_time.milli_second
|
||||
create rnd.set_seed (l_seed)
|
||||
|
||||
-- initialize random number container and math
|
||||
create ergebnis.make_filled (0.0, 1, size)
|
||||
tavg := 0;
|
||||
create math
|
||||
|
||||
from
|
||||
x := 1
|
||||
until
|
||||
x > ergebnis.count
|
||||
loop
|
||||
tmp := randomNormal / 2 + 1
|
||||
tavg := tavg + tmp
|
||||
ergebnis.enter (tmp , x)
|
||||
x := x + 1
|
||||
end
|
||||
|
||||
tavg := tavg / ergebnis.count
|
||||
text := "Average: "
|
||||
text.append_double (tavg)
|
||||
text.append ("%N")
|
||||
print(text)
|
||||
|
||||
tmp := 0
|
||||
from
|
||||
x:= 1
|
||||
until
|
||||
x > ergebnis.count
|
||||
loop
|
||||
tmp := tmp + (ergebnis.item (x) - tavg)^2
|
||||
x := x + 1
|
||||
end
|
||||
|
||||
tmp := math.sqrt (tmp / ergebnis.count)
|
||||
text := "Standard Deviation: "
|
||||
text.append_double (tmp)
|
||||
text.append ("%N")
|
||||
print(text)
|
||||
|
||||
end
|
||||
|
||||
randomNormal:DOUBLE
|
||||
|
||||
local
|
||||
|
||||
first: DOUBLE
|
||||
second: DOUBLE
|
||||
|
||||
do
|
||||
rnd.forth
|
||||
first := rnd.double_item
|
||||
rnd.forth
|
||||
second := rnd.double_item
|
||||
|
||||
Result := math.cosine (2 * math.pi * first) * math.sqrt (-2 * math.log (second))
|
||||
|
||||
end
|
||||
end
|
||||
31
Task/Random-numbers/Erlang/random-numbers.erl
Normal file
31
Task/Random-numbers/Erlang/random-numbers.erl
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
mean(Values) ->
|
||||
mean(tl(Values), hd(Values), 1).
|
||||
|
||||
mean([], Acc, Length) ->
|
||||
Acc / Length;
|
||||
mean(Values, Acc, Length) ->
|
||||
mean(tl(Values), hd(Values)+Acc, Length+1).
|
||||
|
||||
variance(Values) ->
|
||||
Mean = mean(Values),
|
||||
variance(Values, Mean, 0) / length(Values).
|
||||
|
||||
variance([], _, Acc) ->
|
||||
Acc;
|
||||
variance(Values, Mean, Acc) ->
|
||||
Diff = hd(Values) - Mean,
|
||||
DiffSqr = Diff * Diff,
|
||||
variance(tl(Values), Mean, Acc + DiffSqr).
|
||||
|
||||
stddev(Values) ->
|
||||
math:sqrt(variance(Values)).
|
||||
|
||||
normal(Mean, StdDev) ->
|
||||
U = random:uniform(),
|
||||
V = random:uniform(),
|
||||
Mean + StdDev * ( math:sqrt(-2 * math:log(U)) * math:cos(2 * math:pi() * V) ). % Erlang's math:log is the natural logarithm.
|
||||
|
||||
main(_) ->
|
||||
X = [ normal(1.0, 0.5) || _ <- lists:seq(1, 1000) ],
|
||||
io:format("mean = ~w\n", [mean(X)]),
|
||||
io:format("stddev = ~w\n", [stddev(X)]).
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
>v=normal(1,1000)*0.5+1;
|
||||
>mean(v), dev(v)
|
||||
1.00291801071
|
||||
0.498226876528
|
||||
15
Task/Random-numbers/Euphoria/random-numbers.euphoria
Normal file
15
Task/Random-numbers/Euphoria/random-numbers.euphoria
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
include misc.e
|
||||
|
||||
function RandomNormal()
|
||||
atom x1, x2
|
||||
x1 = rand(999999) / 1000000
|
||||
x2 = rand(999999) / 1000000
|
||||
return sqrt(-2*log(x1)) * cos(2*PI*x2)
|
||||
end function
|
||||
|
||||
constant n = 1000
|
||||
sequence s
|
||||
s = repeat(0,n)
|
||||
for i = 1 to n do
|
||||
s[i] = 1 + 0.5 * RandomNormal()
|
||||
end for
|
||||
1
Task/Random-numbers/Factor/random-numbers.factor
Normal file
1
Task/Random-numbers/Factor/random-numbers.factor
Normal file
|
|
@ -0,0 +1 @@
|
|||
1000 [ 1.0 0.5 normal-random-float ] replicate
|
||||
17
Task/Random-numbers/Fantom/random-numbers-1.fantom
Normal file
17
Task/Random-numbers/Fantom/random-numbers-1.fantom
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
class Main
|
||||
{
|
||||
static const Float PI := 0.0f.acos * 2 // we need to precompute PI
|
||||
|
||||
static Float randomNormal ()
|
||||
{
|
||||
return (Float.random * PI * 2).cos * (Float.random.log * -2).sqrt
|
||||
}
|
||||
|
||||
public static Void main ()
|
||||
{
|
||||
mean := 1.0f
|
||||
sd := 0.5f
|
||||
Float[] values := [,] // this is the collection to fill with random numbers
|
||||
1000.times { values.add (randomNormal * sd + mean) }
|
||||
}
|
||||
}
|
||||
20
Task/Random-numbers/Fantom/random-numbers-2.fantom
Normal file
20
Task/Random-numbers/Fantom/random-numbers-2.fantom
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
using [java] java.util::Random
|
||||
|
||||
class Main
|
||||
{
|
||||
Random generator := Random()
|
||||
|
||||
Float randomNormal ()
|
||||
{
|
||||
return generator.nextGaussian
|
||||
}
|
||||
|
||||
public static Void main ()
|
||||
{
|
||||
rnd := Main() // create an instance of Main class, which holds the generator
|
||||
mean := 1.0f
|
||||
sd := 0.5f
|
||||
Float[] values := [,] // this is the collection to fill with random numbers
|
||||
1000.times { values.add (rnd.randomNormal * sd + mean) }
|
||||
}
|
||||
}
|
||||
16
Task/Random-numbers/Forth/random-numbers.fth
Normal file
16
Task/Random-numbers/Forth/random-numbers.fth
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
require random.fs
|
||||
here to seed
|
||||
|
||||
-1. 1 rshift 2constant MAX-D \ or s" MAX-D" ENVIRONMENT? drop
|
||||
|
||||
: frnd ( -- f ) \ uniform distribution 0..1
|
||||
rnd rnd dabs d>f MAX-D d>f f/ ;
|
||||
|
||||
: frnd-normal ( -- f ) \ centered on 0, std dev 1
|
||||
frnd pi f* 2e f* fcos
|
||||
frnd fln -2e f* fsqrt f* ;
|
||||
|
||||
: ,normals ( n -- ) \ store many, centered on 1, std dev 0.5
|
||||
0 do frnd-normal 0.5e f* 1e f+ f, loop ;
|
||||
|
||||
create rnd-array 1000 ,normals
|
||||
24
Task/Random-numbers/Fortran/random-numbers.f
Normal file
24
Task/Random-numbers/Fortran/random-numbers.f
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
PROGRAM Random
|
||||
|
||||
INTEGER, PARAMETER :: n = 1000
|
||||
INTEGER :: i
|
||||
REAL :: array(n), pi, temp, mean = 1.0, sd = 0.5
|
||||
|
||||
pi = 4.0*ATAN(1.0)
|
||||
CALL RANDOM_NUMBER(array) ! Uniform distribution
|
||||
|
||||
! Now convert to normal distribution
|
||||
DO i = 1, n-1, 2
|
||||
temp = sd * SQRT(-2.0*LOG(array(i))) * COS(2*pi*array(i+1)) + mean
|
||||
array(i+1) = sd * SQRT(-2.0*LOG(array(i))) * SIN(2*pi*array(i+1)) + mean
|
||||
array(i) = temp
|
||||
END DO
|
||||
|
||||
! Check mean and standard deviation
|
||||
mean = SUM(array)/n
|
||||
sd = SQRT(SUM((array - mean)**2)/n)
|
||||
|
||||
WRITE(*, "(A,F8.6)") "Mean = ", mean
|
||||
WRITE(*, "(A,F8.6)") "Standard Deviation = ", sd
|
||||
|
||||
END PROGRAM Random
|
||||
17
Task/Random-numbers/Go/random-numbers.go
Normal file
17
Task/Random-numbers/Go/random-numbers.go
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"math/rand"
|
||||
"time"
|
||||
)
|
||||
|
||||
const mean = 1.0
|
||||
const stdv = .5
|
||||
|
||||
func main() {
|
||||
var list [1000]float64
|
||||
rand.Seed(time.Now().UnixNano())
|
||||
for i := range list {
|
||||
list[i] = mean + stdv*rand.NormFloat64()
|
||||
}
|
||||
}
|
||||
2
Task/Random-numbers/Groovy/random-numbers.groovy
Normal file
2
Task/Random-numbers/Groovy/random-numbers.groovy
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
rnd = new Random()
|
||||
result = (1..1000).inject([]) { r, i -> r << rnd.nextGaussian() }
|
||||
14
Task/Random-numbers/Haskell/random-numbers.hs
Normal file
14
Task/Random-numbers/Haskell/random-numbers.hs
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
import System.Random
|
||||
|
||||
pairs :: [a] -> [(a,a)]
|
||||
pairs (x:y:zs) = (x,y):pairs zs
|
||||
pairs _ = []
|
||||
|
||||
gauss mu sigma (r1,r2) =
|
||||
mu + sigma * sqrt (-2 * log r1) * cos (2 * pi * r2)
|
||||
|
||||
gaussians :: (RandomGen g, Random a, Floating a) => Int -> g -> [a]
|
||||
gaussians n g = take n $ map (gauss 1.0 0.5) $ pairs $ randoms g
|
||||
|
||||
result :: IO [Double]
|
||||
result = getStdGen >>= \g -> return $ gaussians 1000 g
|
||||
4
Task/Random-numbers/HicEst/random-numbers.hicest
Normal file
4
Task/Random-numbers/HicEst/random-numbers.hicest
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
REAL :: n=1000, m=1, s=0.5, array(n)
|
||||
|
||||
pi = 4 * ATAN(1)
|
||||
array = s * (-2*LOG(RAN(1)))^0.5 * COS(2*pi*RAN(1)) + m
|
||||
1
Task/Random-numbers/IDL/random-numbers.idl
Normal file
1
Task/Random-numbers/IDL/random-numbers.idl
Normal file
|
|
@ -0,0 +1 @@
|
|||
result = 1.0 + 0.5*randomn(seed,1000)
|
||||
7
Task/Random-numbers/Icon/random-numbers.icon
Normal file
7
Task/Random-numbers/Icon/random-numbers.icon
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
procedure main()
|
||||
local L
|
||||
L := list(1000)
|
||||
every L[1 to 1000] := 1.0 + 0.5 * sqrt(-2.0 * log(?0)) * cos(2.0 * &pi * ?0)
|
||||
|
||||
every write(!L)
|
||||
end
|
||||
4
Task/Random-numbers/J/random-numbers-1.j
Normal file
4
Task/Random-numbers/J/random-numbers-1.j
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
urand=: ?@$ 0:
|
||||
zrand=: (2 o. 2p1 * urand) * [: %: _2 * [: ^. urand
|
||||
|
||||
1 + 0.5 * zrand 100
|
||||
3
Task/Random-numbers/J/random-numbers-2.j
Normal file
3
Task/Random-numbers/J/random-numbers-2.j
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
require 'stats/distribs/normal'
|
||||
1 0.5 rnorm 1000
|
||||
1.44868803 1.21548637 0.812460657 1.54295452 1.2470606 ...
|
||||
6
Task/Random-numbers/Java/random-numbers.java
Normal file
6
Task/Random-numbers/Java/random-numbers.java
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
double[] list = new double[1000];
|
||||
double mean = 1.0, std = 0.5;
|
||||
Random rng = new Random();
|
||||
for(int i = 0;i<list.length;i++) {
|
||||
list[i] = mean + std * rng.nextGaussian();
|
||||
}
|
||||
8
Task/Random-numbers/JavaScript/random-numbers.js
Normal file
8
Task/Random-numbers/JavaScript/random-numbers.js
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
function randomNormal() {
|
||||
return Math.cos(2 * Math.PI * Math.random()) * Math.sqrt(-2 * Math.log(Math.random()))
|
||||
}
|
||||
|
||||
var a = []
|
||||
for (var i=0; i < 1000; i++){
|
||||
a[i] = randomNormal() / 2 + 1
|
||||
}
|
||||
6
Task/Random-numbers/Liberty-BASIC/random-numbers.liberty
Normal file
6
Task/Random-numbers/Liberty-BASIC/random-numbers.liberty
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
dim a(1000)
|
||||
mean =1
|
||||
sd =0.5
|
||||
for i = 1 to 1000 ' throw 1000 normal variates
|
||||
a( i) =mean +sd *( sqr( -2 * log( rnd( 0))) * cos( 2 * pi * rnd( 0)))
|
||||
next i
|
||||
10
Task/Random-numbers/Logo/random-numbers.logo
Normal file
10
Task/Random-numbers/Logo/random-numbers.logo
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
to random.float ; 0..1
|
||||
localmake "max.int lshift -1 -1
|
||||
output quotient random :max.int :max.int
|
||||
end
|
||||
|
||||
to random.gaussian
|
||||
output product cos random 360 sqrt -2 / ln random.float
|
||||
end
|
||||
|
||||
make "randoms cascade 1000 [fput random.gaussian / 2 + 1 ?] []
|
||||
2
Task/Random-numbers/MATLAB/random-numbers-1.m
Normal file
2
Task/Random-numbers/MATLAB/random-numbers-1.m
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
mu = 1; sd = 0.5;
|
||||
x = randn(1000,1) * sd + mu;
|
||||
1
Task/Random-numbers/MATLAB/random-numbers-2.m
Normal file
1
Task/Random-numbers/MATLAB/random-numbers-2.m
Normal file
|
|
@ -0,0 +1 @@
|
|||
x = normrnd(mu, sd, [1000,1]);
|
||||
15
Task/Random-numbers/MATLAB/random-numbers-3.m
Normal file
15
Task/Random-numbers/MATLAB/random-numbers-3.m
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
function randNum = randNorm(mu0,chi2, sz)
|
||||
|
||||
radiusSquared = +Inf;
|
||||
|
||||
while (radiusSquared >= 1)
|
||||
u = ( 2 * rand(sz) ) - 1;
|
||||
v = ( 2 * rand(sz) ) - 1;
|
||||
|
||||
radiusSquared = u.^2 + v.^2;
|
||||
end
|
||||
|
||||
scaleFactor = sqrt( ( -2*log(radiusSquared) )./ radiusSquared );
|
||||
randNum = (v .* scaleFactor .* chi2) + mu0;
|
||||
|
||||
end
|
||||
5
Task/Random-numbers/MATLAB/random-numbers-4.m
Normal file
5
Task/Random-numbers/MATLAB/random-numbers-4.m
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
>> randNorm(1,.5, [1000,1])
|
||||
|
||||
ans =
|
||||
|
||||
0.693984121077029
|
||||
8
Task/Random-numbers/MAXScript/random-numbers.maxscript
Normal file
8
Task/Random-numbers/MAXScript/random-numbers.maxscript
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
arr = #()
|
||||
for i in 1 to 1000 do
|
||||
(
|
||||
a = random 0.0 1.0
|
||||
b = random 0.0 1.0
|
||||
c = 1.0 + 0.5 * sqrt (-2*log a) * cos (360*b) -- Maxscript cos takes degrees
|
||||
append arr c
|
||||
)
|
||||
1
Task/Random-numbers/Mathematica/random-numbers.math
Normal file
1
Task/Random-numbers/Mathematica/random-numbers.math
Normal file
|
|
@ -0,0 +1 @@
|
|||
RandomReal[NormalDistribution[1, 1/2], 1000]
|
||||
3
Task/Random-numbers/Maxima/random-numbers.maxima
Normal file
3
Task/Random-numbers/Maxima/random-numbers.maxima
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
load(distrib)$
|
||||
|
||||
random_normal(1.0, 0.5, 1000);
|
||||
19
Task/Random-numbers/Metafont/random-numbers.metafont
Normal file
19
Task/Random-numbers/Metafont/random-numbers.metafont
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
numeric col[];
|
||||
|
||||
m := 0; % m holds the mean, for testing purposes
|
||||
for i = 1 upto 1000:
|
||||
col[i] := 1 + .5normaldeviate;
|
||||
m := m + col[i];
|
||||
endfor
|
||||
|
||||
% testing
|
||||
m := m / 1000; % finalize the computation of the mean
|
||||
|
||||
s := 0; % in s we compute the standard deviation
|
||||
for i = 1 upto 1000:
|
||||
s := s + (col[i] - m)**2;
|
||||
endfor
|
||||
s := sqrt(s / 1000);
|
||||
|
||||
show m, s; % and let's show that really they get what we wanted
|
||||
end
|
||||
9
Task/Random-numbers/Mirah/random-numbers.mirah
Normal file
9
Task/Random-numbers/Mirah/random-numbers.mirah
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
import java.util.Random
|
||||
|
||||
list = double[999]
|
||||
mean = 1.0
|
||||
std = 0.5
|
||||
rng = Random.new
|
||||
0.upto(998) do | i |
|
||||
list[i] = mean + std * rng.nextGaussian
|
||||
end
|
||||
21
Task/Random-numbers/Modula-3/random-numbers.mod3
Normal file
21
Task/Random-numbers/Modula-3/random-numbers.mod3
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
MODULE Rand EXPORTS Main;
|
||||
|
||||
IMPORT Random;
|
||||
FROM Math IMPORT log, cos, sqrt, Pi;
|
||||
|
||||
VAR rands: ARRAY [1..1000] OF LONGREAL;
|
||||
|
||||
(* Normal distribution. *)
|
||||
PROCEDURE RandNorm(): LONGREAL =
|
||||
BEGIN
|
||||
WITH rand = NEW(Random.Default).init() DO
|
||||
RETURN
|
||||
sqrt(-2.0D0 * log(rand.longreal())) * cos(2.0D0 * Pi * rand.longreal());
|
||||
END;
|
||||
END RandNorm;
|
||||
|
||||
BEGIN
|
||||
FOR i := FIRST(rands) TO LAST(rands) DO
|
||||
rands[i] := 1.0D0 + 0.5D0 * RandNorm();
|
||||
END;
|
||||
END Rand.
|
||||
55
Task/Random-numbers/NetRexx/random-numbers.netrexx
Normal file
55
Task/Random-numbers/NetRexx/random-numbers.netrexx
Normal file
|
|
@ -0,0 +1,55 @@
|
|||
/* NetRexx */
|
||||
options replace format comments java crossref symbols nobinary
|
||||
|
||||
import java.math.BigDecimal
|
||||
import java.math.MathContext
|
||||
|
||||
-- prologue
|
||||
numeric digits 20
|
||||
|
||||
-- get input, set defaults
|
||||
parse arg dp mu sigma ec .
|
||||
if mu = '' | mu = '.' then mean = 1.0; else mean = mu
|
||||
if sigma = '' | sigma = '.' then stdDeviation = 0.5; else stdDeviation = sigma
|
||||
if dp = '' | dp = '.' then displayPrecision = 1; else displayPrecision = dp
|
||||
if ec = '' | ec = '.' then elements = 1000; else elements = ec
|
||||
|
||||
-- set up
|
||||
RNG = Random()
|
||||
numberList = java.util.List
|
||||
numberList = ArrayList()
|
||||
|
||||
-- generate list of random numbers
|
||||
loop for elements
|
||||
rn = mean + stdDeviation * RNG.nextGaussian()
|
||||
numberList.add(BigDecimal(rn, MathContext.DECIMAL128))
|
||||
end
|
||||
|
||||
-- report
|
||||
say "Mean: " mean
|
||||
say "Standard Deviation:" stdDeviation
|
||||
say "Precision: " displayPrecision
|
||||
say
|
||||
drawBellCurve(numberList, displayPrecision)
|
||||
|
||||
return
|
||||
|
||||
-- -----------------------------------------------------------------------------
|
||||
method drawBellCurve(numberList = java.util.List, precision) static
|
||||
Collections.sort(numberList)
|
||||
val = BigDecimal
|
||||
lastN = ''
|
||||
nextN = ''
|
||||
loop val over numberList
|
||||
nextN = Rexx(val.toPlainString()).format(5, precision)
|
||||
select
|
||||
when lastN = '' then nop
|
||||
when lastN \= nextN then say lastN
|
||||
otherwise nop
|
||||
end
|
||||
say '*\-'
|
||||
lastN = nextN
|
||||
end val
|
||||
say lastN
|
||||
|
||||
return
|
||||
1
Task/Random-numbers/NewLISP/random-numbers.newlisp
Normal file
1
Task/Random-numbers/NewLISP/random-numbers.newlisp
Normal file
|
|
@ -0,0 +1 @@
|
|||
(normal 1 .5 1000)
|
||||
4
Task/Random-numbers/OCaml/random-numbers.ocaml
Normal file
4
Task/Random-numbers/OCaml/random-numbers.ocaml
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
let pi = 4. *. atan 1.;;
|
||||
let random_gaussian () =
|
||||
1. +. sqrt (-2. *. log (Random.float 1.)) *. cos (2. *. pi *. Random.float 1.);;
|
||||
let a = Array.init 1000 (fun _ -> random_gaussian ());;
|
||||
18
Task/Random-numbers/Objeck/random-numbers.objeck
Normal file
18
Task/Random-numbers/Objeck/random-numbers.objeck
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
bundle Default {
|
||||
class RandomNumbers {
|
||||
function : Main(args : String[]) ~ Nil {
|
||||
rands := Float->New[1000];
|
||||
for(i := 0; i < rands->Size(); i += 1;) {
|
||||
rands[i] := 1.0 + 0.5 * RandomNormal();
|
||||
};
|
||||
|
||||
each(i : rands) {
|
||||
rands[i]->PrintLine();
|
||||
};
|
||||
}
|
||||
|
||||
function : native : RandomNormal() ~ Float {
|
||||
return (2 * Float->Pi() * Float->Random())->Cos() * (-2 * (Float->Random()->Log()))->SquareRoot();
|
||||
}
|
||||
}
|
||||
}
|
||||
3
Task/Random-numbers/Octave/random-numbers.octave
Normal file
3
Task/Random-numbers/Octave/random-numbers.octave
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
p = normrnd(1.0, 0.5, 1000, 1);
|
||||
disp(mean(p));
|
||||
disp(sqrt(sum((p - mean(p)).^2)/numel(p)));
|
||||
6
Task/Random-numbers/PARI-GP/random-numbers.pari
Normal file
6
Task/Random-numbers/PARI-GP/random-numbers.pari
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
rnormal()={
|
||||
my(pr=32*ceil(default(realprecision)*log(10)/log(4294967296)),u1=random(2^pr)*1.>>pr,u2=random(2^pr)*1.>>pr);
|
||||
sqrt(-2*log(u1))*cos(2*Pi*u1)
|
||||
\\ Could easily be extended with a second normal at very little cost.
|
||||
};
|
||||
vector(1000,unused,rnormal()/2+1)
|
||||
11
Task/Random-numbers/PHP/random-numbers.php
Normal file
11
Task/Random-numbers/PHP/random-numbers.php
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
function random() {
|
||||
return mt_rand() / mt_getrandmax();
|
||||
}
|
||||
|
||||
$pi = pi(); // Set PI
|
||||
|
||||
$a = array();
|
||||
for ($i = 0; $i < 1000; $i++) {
|
||||
$a[$i] = 1.0 + ((sqrt(-2 * log(random())) * cos(2 * $pi * random())) * 0.5);
|
||||
|
||||
}
|
||||
21
Task/Random-numbers/PL-I/random-numbers.pli
Normal file
21
Task/Random-numbers/PL-I/random-numbers.pli
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
/* CONVERTED FROM WIKI FORTRAN */
|
||||
Normal_Random: procedure options (main);
|
||||
declare (array(1000), pi, temp,
|
||||
mean initial (1.0), sd initial (0.5)) float (18);
|
||||
declare (i, n) fixed binary;
|
||||
|
||||
n = hbound(array, 1);
|
||||
pi = 4.0*ATAN(1.0);
|
||||
array = random(); /* Uniform distribution */
|
||||
/* Now convert to normal distribution */
|
||||
DO i = 1 to n-1 by 2;
|
||||
temp = sd * SQRT(-2.0*LOG(array(i))) * COS(2*pi*array(i+1)) + mean;
|
||||
array(i+1) = sd * SQRT(-2.0*LOG(array(i))) * SIN(2*pi*array(i+1)) + mean;
|
||||
array(i) = temp;
|
||||
END;
|
||||
/* Check mean and standard deviation */
|
||||
mean = SUM(array)/n;
|
||||
sd = SQRT(SUM((array - mean)**2)/n);
|
||||
put skip edit ( "Mean = ", mean ) (a, F(18,16) );
|
||||
put skip edit ( "Standard Deviation = ", sd) (a, F(18,16));
|
||||
END Normal_Random;
|
||||
24
Task/Random-numbers/PL-SQL/random-numbers.sql
Normal file
24
Task/Random-numbers/PL-SQL/random-numbers.sql
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
create or replace
|
||||
PROCEDURE PROCEDURE1 AS
|
||||
TYPE numsColl is TABLE OF NUMBER;
|
||||
nums numsColl;
|
||||
|
||||
FUNCTION GenNums(n IN NUMBER) RETURN numsColl AS
|
||||
PI NUMBER := ACOS (-1);
|
||||
BEGIN
|
||||
nums := numsColl();
|
||||
nums.extend(n);
|
||||
|
||||
FOR i in 1 .. n LOOP
|
||||
nums(i) := 1 + .5 * (sqrt(-2 * log(dbms_random.value, 10)) * cos(2 * PI * dbms_random.value));
|
||||
END LOOP;
|
||||
|
||||
RETURN nums;
|
||||
END GenNums;
|
||||
|
||||
BEGIN
|
||||
nums := GenNums(10);
|
||||
FOR i in 1 .. 10 LOOP
|
||||
DBMS_OUTPUT.PUT_LINE(nums(i));
|
||||
END LOOP;
|
||||
END PROCEDURE1;
|
||||
5
Task/Random-numbers/Perl-6/random-numbers.pl6
Normal file
5
Task/Random-numbers/Perl-6/random-numbers.pl6
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
sub randnorm ($mean, $stddev) {
|
||||
$mean + $stddev * sqrt(-2 * log rand) * cos(2 * pi * rand)
|
||||
}
|
||||
|
||||
my @nums = map { randnorm 1, 0.5 }, ^1000;
|
||||
5
Task/Random-numbers/Perl/random-numbers.pl
Normal file
5
Task/Random-numbers/Perl/random-numbers.pl
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
my $PI = 2 * atan2 1, 0;
|
||||
|
||||
my @nums = map {
|
||||
1 + 0.5 * sqrt(-2 * log rand) * cos(2 * $PI * rand)
|
||||
} 1..1000;
|
||||
16
Task/Random-numbers/PicoLisp/random-numbers.l
Normal file
16
Task/Random-numbers/PicoLisp/random-numbers.l
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
(load "@lib/math.l")
|
||||
|
||||
(de randomNormal () # Normal distribution, centered on 0, std dev 1
|
||||
(*/
|
||||
(sqrt (* -2.0 (log (rand 0 1.0))))
|
||||
(cos (*/ 2.0 pi (rand 0 1.0) `(* 1.0 1.0)))
|
||||
1.0 ) )
|
||||
|
||||
(seed (time)) # Randomize
|
||||
|
||||
(let Result
|
||||
(make # Build list
|
||||
(do 1000 # of 1000 elements
|
||||
(link (+ 1.0 (/ (randomNormal) 2))) ) )
|
||||
(for N (head 7 Result) # Print first 7 results
|
||||
(prin (format N *Scl) " ") ) )
|
||||
15
Task/Random-numbers/Pop11/random-numbers.pop11
Normal file
15
Task/Random-numbers/Pop11/random-numbers.pop11
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
;;; Choose radians as arguments to trigonometic functions
|
||||
true -> popradians;
|
||||
|
||||
;;; procedure generating standard normal distribution
|
||||
define random_normal() -> result;
|
||||
lvars r1 = random0(1.0), r2 = random0(1.0);
|
||||
cos(2*pi*r1)*sqrt(-2*log(r2)) -> result
|
||||
enddefine;
|
||||
|
||||
lvars array, i;
|
||||
|
||||
;;; Put numbers on the stack
|
||||
for i from 1 to 1000 do 1.0+0.5*random_normal() endfor;
|
||||
;;; collect them into array
|
||||
consvector(1000) -> array;
|
||||
18
Task/Random-numbers/PureBasic/random-numbers.purebasic
Normal file
18
Task/Random-numbers/PureBasic/random-numbers.purebasic
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
Procedure.f RandomNormal()
|
||||
; This procedure can return any real number.
|
||||
Protected.f x1, x2
|
||||
|
||||
; random numbers from the open interval ]0, 1[
|
||||
x1 = (Random(999998)+1) / 1000000 ; must be > 0 because of Log(x1)
|
||||
x2 = (Random(999998)+1) / 1000000
|
||||
|
||||
ProcedureReturn Sqr(-2*Log(x1)) * Cos(2*#PI*x2)
|
||||
EndProcedure
|
||||
|
||||
|
||||
Define i, n=1000
|
||||
|
||||
Dim a.q(n-1)
|
||||
For i = 0 To n-1
|
||||
a(i) = 1 + 0.5 * RandomNormal()
|
||||
Next
|
||||
3
Task/Random-numbers/Python/random-numbers-1.py
Normal file
3
Task/Random-numbers/Python/random-numbers-1.py
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
import random
|
||||
values = [random.gauss(1, .5) for i in range(1000)]
|
||||
# or [ random.normalvariate(1, 0.5) for i in range(1000)]
|
||||
4
Task/Random-numbers/Python/random-numbers-2.py
Normal file
4
Task/Random-numbers/Python/random-numbers-2.py
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
>>> mean = sum(values)/1000
|
||||
>>> sdeviation = (sum((i - mean)**2 for i in values)/1000)**0.5
|
||||
>>> mean, sdeviation
|
||||
(1.0127861555468178, 0.5006682783828207)
|
||||
1
Task/Random-numbers/R/random-numbers.r
Normal file
1
Task/Random-numbers/R/random-numbers.r
Normal file
|
|
@ -0,0 +1 @@
|
|||
result <- rnorm(1000, mean=1, sd=0.5)
|
||||
41
Task/Random-numbers/REXX/random-numbers.rexx
Normal file
41
Task/Random-numbers/REXX/random-numbers.rexx
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
/*REXX pgm gens 1,000 normally distributed #s: mean=1, standard dev.=½. */
|
||||
call pi /*call subroutine to define pi. */
|
||||
parse arg n seed . /*allow specification of N | seed*/
|
||||
if n=='' | n==',' then n=1000 /* N is the size of the array. */
|
||||
if seed\=='' then call random ,,seed /*use seed for repeatable RANDOM#*/
|
||||
mean=1 /*desired new mean (arith. avg.) */
|
||||
sd=1/2 /*desired new standard deviation.*/
|
||||
do g=1 for n /*generate N uniform random nums.*/
|
||||
#.g=random(0,1e5)/1e5 /*REXX gens uniform rand integers*/
|
||||
end /*g*/
|
||||
|
||||
say ' old mean=' mean()
|
||||
say 'old standard deviation=' stddev()
|
||||
say
|
||||
do j=1 to n-1 by 2
|
||||
m=j+1
|
||||
_=sd*sqrt(-2*ln(#.j))*cos(2*pi*#.m)+mean /*use Box-Muller method*/
|
||||
#.m=sd*sqrt(-2*ln(#.j))*sin(2*pi*#.m)+mean /*rand # must be 0──<E29480>1.*/
|
||||
#.j=_
|
||||
end /*j*/
|
||||
say ' new mean=' mean()
|
||||
say 'new standard deviation=' stddev()
|
||||
exit /*stick a fork in it, we're done.*/
|
||||
/*──────────────────────────────────subroutines─────────────────────────*/
|
||||
mean: _=0; do k=1 for n; _=_+#.k; end; return _/n
|
||||
stddev: _avg=mean(); _=0; do k=1 for n; _=_+(#.k-_avg)**2; end; return sqrt(_/n)
|
||||
e: e=2.7182818284590452353602874713526624977572470936999595749669676277240766303535; return e
|
||||
pi: pi=3.1415926535897932384626433832795028841971693993751058209749445923078164062862; return pi
|
||||
r2r: return arg(1)//(2*pi())
|
||||
sqrt: procedure;parse arg x; if x=0 then return 0; d=digits(); numeric digits 11; g=.sqrtGuess()
|
||||
do j=0 while p>9; m.j=p; p=p%2+1; end; do k=j+5 to 0 by -1; if m.k>11 then numeric digits m.k
|
||||
g=.5*(g+x/g); end; numeric digits d; return g/1
|
||||
.sqrtGuess: numeric form; m.=11; p=d+d%4+2
|
||||
parse value format(x,2,1,,0) 'E0' with g 'E' _ .; return g*.5'E'_%2
|
||||
cos: procedure; arg x; x=r2r(x); a=abs(x); numeric fuzz min(9,digits()-9); if a=pi() then return -1
|
||||
if a=pi()/2|a=2*pi() then return 0;if a=pi()/3 then return .5;if a=2*pi()/3 then return -.5;return .sincos(1,1,-1)
|
||||
sin: procedure; arg x; x=r2r(x); numeric fuzz min(5,digits()-3); if abs(x)=pi() then return 0; return .sincos(x,x,1)
|
||||
.sincos:parse arg z,_,i; x=x*x; p=z; do k=2 by 2; _=-_*x/(k*(k+i)); z=z+_; if z=p then leave; p=z; end; return z
|
||||
ln: procedure; parse arg x,f; call e; ig=x>1.5; is=1-2*(ig\==1); ii=0; xx=x; return .ln_comp()
|
||||
.ln_comp: do while ig&xx>1.5|\ig&xx<.5;_=e;do k=-1;iz=xx*_**-is;if k>=0&(ig&iz<1|\ig&iz>.5) then leave;_=_*_;izz=iz;end
|
||||
xx=izz;ii=ii+is*2**k;end;x=x*e**-ii-1;z=0;_=-1;p=z;do k=1;_=-_*x;z=z+_/k;if z=p then leave;p=z;end;return z+ii
|
||||
1
Task/Random-numbers/Ruby/random-numbers.rb
Normal file
1
Task/Random-numbers/Ruby/random-numbers.rb
Normal file
|
|
@ -0,0 +1 @@
|
|||
Array.new(1000) { 1 + Math.sqrt(-2 * Math.log(rand)) * Math.cos(2 * Math::PI * rand) }
|
||||
5
Task/Random-numbers/Run-BASIC/random-numbers.run
Normal file
5
Task/Random-numbers/Run-BASIC/random-numbers.run
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
dim a(1000)
|
||||
pi = 22/7
|
||||
for i = 1 to 1000
|
||||
a( i) = 1 + .5 * (sqr(-2 * log(rnd(0))) * cos(2 * pi * rnd(0)))
|
||||
next i
|
||||
19
Task/Random-numbers/Sather/random-numbers.sa
Normal file
19
Task/Random-numbers/Sather/random-numbers.sa
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
class MAIN is
|
||||
main is
|
||||
a:ARRAY{FLTD} := #(1000);
|
||||
i:INT;
|
||||
|
||||
RND::seed(2010);
|
||||
loop i := 1.upto!(1000) - 1;
|
||||
a[i] := 1.0d + 0.5d * RND::standard_normal;
|
||||
end;
|
||||
|
||||
-- testing the distribution
|
||||
mean ::= a.reduce(bind(_.plus(_))) / a.size.fltd;
|
||||
#OUT + "mean " + mean + "\n";
|
||||
a.map(bind(_.minus(mean)));
|
||||
a.map(bind(_.pow(2.0d)));
|
||||
dev ::= (a.reduce(bind(_.plus(_))) / a.size.fltd).sqrt;
|
||||
#OUT + "dev " + dev + "\n";
|
||||
end;
|
||||
end;
|
||||
1
Task/Random-numbers/Scala/random-numbers.scala
Normal file
1
Task/Random-numbers/Scala/random-numbers.scala
Normal file
|
|
@ -0,0 +1 @@
|
|||
List.fill(1000)(1.0 + 0.5 * scala.util.Random.nextGaussian)
|
||||
47
Task/Random-numbers/Scheme/random-numbers.ss
Normal file
47
Task/Random-numbers/Scheme/random-numbers.ss
Normal file
|
|
@ -0,0 +1,47 @@
|
|||
; linear congruential generator given in C99 section 7.20.2.1
|
||||
(define ((c-rand seed)) (set! seed (remainder (+ (* 1103515245 seed) 12345) 2147483648)) (quotient seed 65536))
|
||||
|
||||
; uniform real numbers in open interval (0, 1)
|
||||
(define (unif-rand seed) (let ((r (c-rand seed))) (lambda () (/ (+ (r) 1) 32769.0))))
|
||||
|
||||
; Box-Muller method to generate normal distribution
|
||||
(define (normal-rand unif m s)
|
||||
(let ((? #t) (! 0.0) (twopi (* 2.0 (acos -1.0))))
|
||||
(lambda ()
|
||||
(set! ? (not ?))
|
||||
(if ? !
|
||||
(let ((a (sqrt (* -2.0 (log (unif))))) (b (* twopi (unif))))
|
||||
(set! ! (+ m (* s a (sin b))))
|
||||
(+ m (* s a (cos b))))))))
|
||||
|
||||
(define rnorm (normal-rand (unif-rand 0) 1.0 0.5))
|
||||
|
||||
; auxiliary function to get a list of 'n random numbers from generator 'r
|
||||
(define (rand-list r n) = (if (zero? n) '() (cons (r) (rand-list r (- n 1)))))
|
||||
|
||||
(define v (rand-list rnorm 1000))
|
||||
|
||||
v
|
||||
#|
|
||||
(-0.27965824722565835
|
||||
-0.8870860825789542
|
||||
0.6499618744638194
|
||||
0.31336141955110863
|
||||
...
|
||||
0.5648743998193049
|
||||
0.8282656735558756
|
||||
0.6399951934564637
|
||||
0.7699535302478072)
|
||||
|#
|
||||
|
||||
; check mean and standard deviation
|
||||
(define (mean-sdev v)
|
||||
(let loop ((v v) (a 0) (b 0) (n 0))
|
||||
(if (null? v)
|
||||
(let ((mean (/ a n)))
|
||||
(list mean (sqrt (/ (- b (* n mean mean)) (- n 1)))))
|
||||
(let ((x (car v)))
|
||||
(loop (cdr v) (+ a x) (+ b (* x x)) (+ n 1))))))
|
||||
|
||||
(mean-sdev v)
|
||||
; (0.9562156817697293 0.5097087109575911)
|
||||
25
Task/Random-numbers/Seed7/random-numbers.seed7
Normal file
25
Task/Random-numbers/Seed7/random-numbers.seed7
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
$ include "seed7_05.s7i";
|
||||
include "float.s7i";
|
||||
include "math.s7i";
|
||||
|
||||
const func float: frand is func # Uniform distribution, (0..1]
|
||||
result
|
||||
var float: frand is 0.0;
|
||||
begin
|
||||
repeat
|
||||
frand := rand(0.0, 1.0);
|
||||
until frand <> 0.0;
|
||||
end func;
|
||||
|
||||
const func float: randomNormal is # Normal distribution, centered on 0, std dev 1
|
||||
return sqrt(-2.0 * log(frand)) * cos(2.0 * PI * frand);
|
||||
|
||||
const proc: main is func
|
||||
local
|
||||
var integer: i is 0;
|
||||
var array float: rands is 1000 times 0.0;
|
||||
begin
|
||||
for i range 1 to length(rands) do
|
||||
rands[i] := 1.0 + 0.5 * randomNormal;
|
||||
end for;
|
||||
end func;
|
||||
5
Task/Random-numbers/Standard-ML/random-numbers-1.ml
Normal file
5
Task/Random-numbers/Standard-ML/random-numbers-1.ml
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
val seed = 0w42;
|
||||
val gen = Rand.mkRandom seed;
|
||||
fun random_gaussian () =
|
||||
1.0 + Math.sqrt (~2.0 * Math.ln (Rand.norm (gen ()))) * Math.cos (2.0 * Math.pi * Rand.norm (gen ()));
|
||||
val a = List.tabulate (1000, fn _ => random_gaussian ());
|
||||
5
Task/Random-numbers/Standard-ML/random-numbers-2.ml
Normal file
5
Task/Random-numbers/Standard-ML/random-numbers-2.ml
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
val seed = (47,42);
|
||||
val gen = Random.rand seed;
|
||||
fun random_gaussian () =
|
||||
1.0 + Math.sqrt (~2.0 * Math.ln (Random.randReal gen)) * Math.cos (2.0 * Math.pi * Random.randReal gen);
|
||||
val a = List.tabulate (1000, fn _ => random_gaussian ());
|
||||
11
Task/Random-numbers/Tcl/random-numbers.tcl
Normal file
11
Task/Random-numbers/Tcl/random-numbers.tcl
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
package require Tcl 8.5
|
||||
variable ::pi [expr acos(0)]
|
||||
proc ::tcl::mathfunc::nrand {} {
|
||||
expr {sqrt(-2*log(rand())) * cos(2*$::pi*rand())}
|
||||
}
|
||||
|
||||
set mean 1.0
|
||||
set stddev 0.5
|
||||
for {set i 0} {$i < 1000} {incr i} {
|
||||
lappend result [expr {$mean + $stddev*nrand()}]
|
||||
}
|
||||
14
Task/Random-numbers/Ursala/random-numbers.ursala
Normal file
14
Task/Random-numbers/Ursala/random-numbers.ursala
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
#import nat
|
||||
#import flo
|
||||
|
||||
pop_stats("mu","sigma") = plus/*"mu"+ times/*"sigma"+ Z*+ iota
|
||||
|
||||
sample_stats("mu","sigma") = plus^*D(minus/"mu"+ mean,~&)+ vid^*D(div\"sigma"+ stdev,~&)+ Z*+ iota
|
||||
|
||||
#cast %eWL
|
||||
|
||||
test =
|
||||
|
||||
^(mean,stdev)* <
|
||||
pop_stats(1.,0.5) 1000,
|
||||
sample_stats(1.,0.5) 1000>
|
||||
3
Task/Random-numbers/Yorick/random-numbers.yorick
Normal file
3
Task/Random-numbers/Yorick/random-numbers.yorick
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
func random_normal(count) {
|
||||
return sqrt(-2*log(random(count))) * cos(2*pi*random(count));
|
||||
}
|
||||
6
Task/Random-numbers/ZX-Spectrum-Basic/random-numbers.zx
Normal file
6
Task/Random-numbers/ZX-Spectrum-Basic/random-numbers.zx
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
10 RANDOMIZE 0 : REM seeds random number generator based on uptime
|
||||
20 DIM a(1000)
|
||||
30 CLS
|
||||
40 FOR i = 1 TO 1000
|
||||
50 LET a(i) = 1 + SQR(-2 * LN(RND)) * COS(2 * PI * RND)
|
||||
60 NEXT i
|
||||
Loading…
Add table
Add a link
Reference in a new issue