#!/usr/local/bin/perl

use 5.043.5;               # long doubles
use utf8;

$| = 1;

use Math::Trig qw(:pi);

# bignum::precision(-100);

my $z = $ARGV[0];
unless ($z){
    print "\nUsage: $0 <number stddev>\n\n";
    exit -1
}
die "Wrong number as argument" if ($z<0 || $z=~/\D\D/ || !defined $z);

my $step = 1/10_000_000;
my $r = 1/2 ;

# densidad de la distribución normal estandarizada
# Z = (1/sqrt(2*pi))*exp(1)^(-0.5*z*z)
# my $pi = 4*atan2(1,1) ;

my $static = 1/(10_000_000*sqrt(2*pi)) ;

my $e = exp(1) ;

for ( my $i = $step; $i <= $z; $i += $step ) {
    print "\r$i";
    $r += $static * ($e**(-$i*$i/2));
}
say "";

$r = sprintf ("%.8f",$r);

say "P[ Z <= $z ] = $r";
my $rleft = 1 - $r ;
say "P[ Z > $z ] = $rleft";
$r -= 2 * $rleft;
say "P[ -$z <= Z < $z ] = $r";

exit 3;

__END__

Esta utilidad nos devuelve la probabilidad de una tabla N(0,1) de una cola
y de dos colas. El número de cifras es «suficiente».

Revisión: lun 17 nov 2025 11:08:00 CET

Revisión: mié 26 nov 2025 06:47:51 CET

Revisión: vie 28 nov 2025 08:29:00 CET
  
La razón por la que se toman intervalos [a <= x < b] es para que se puedan sumar intervalos
  P[ a <= x < c ] = P[ a <= x < b ] + P[ b <= x < c ]
