ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/cal/cal/norm.cal
Revision: 1.4
Committed: Sun Sep 12 17:04:41 2021 UTC (2 years, 8 months ago) by greg
Branch: MAIN
CVS Tags: rad5R4, HEAD
Changes since 1.3: +7 -1 lines
Log Message:
feat: Added exact calculations

File Contents

# User Rev Content
1 greg 1.4 { RCSid $Id: norm.cal,v 1.3 2017/04/19 22:09:12 greg Exp $ }
2 greg 1.1 {
3     Normal Distribution Functions
4    
5     10/20/87
6    
7     Z(u) - normal probability density function
8    
9     Q(u) - Z(u) integrated from u to infinity
10    
11     u(p) - u for known value p = Q(u)
12     }
13    
14     NORMF : 1/sqrt(2*PI) ;
15    
16 greg 1.3 Z(u) : NORMF * exp(-u*u/2) ;
17 greg 1.1
18 greg 1.4 { ### Old approximation:
19    
20 greg 1.3 Q2(t) : t*(.31938153+t*(-.356563782+t*(1.781477937+
21     t*(-1.821255978+t*1.330274429)))) ;
22 greg 1.1
23 greg 1.3 Q1(u) : Z(u) * Q2(1/(1+.2316419*u)) ;
24 greg 1.1
25 greg 1.3 Q(u) : if( u, Q1(u), 1-Q1(-u) ) ;
26 greg 1.1
27 greg 1.4 ### erf() gives us exact value: }
28    
29     Q(u) : .5 - .5*erf(u/sqrt(2)) ;
30    
31 greg 1.3 u2(t) : t - (2.515517+t*(.802853+t*.010328))/
32     (1+t*(1.432788+t*(.189269+t*.001308))) ;
33 greg 1.1
34 greg 1.3 u1(p) : u2(sqrt(-2*log(p))) ;
35 greg 1.1
36 greg 1.3 u(p) : if( .5-p, u1(p), -u1(1-p) ) ;