[Cfp-interest 2862] Re: CFP review of TS-4 and TS-5 revisions

David Hough CFP pcfp at oakapple.net
Fri Aug 25 10:01:07 PDT 2023


There's always one more typo.   This version declares den1p



EXAMPLE

The scaled reduction functions support computing quantities of modest
magnitudes whose intermediate results might well overflow and underflow.

One example is the computation of Clebsch-Gordan coefficients 
used to add angular momentum in quantum mechanics.
Expressions for these quantities involve quotients of products of factorials,
and so are prone to intermediate overflow.

As a simplified illustration, consider computing n1!n2!/n3! -

 int n1, n2, n3 ;

 int i ;
 double num1, num2, den1, quot ;

 double num1p[n1}, num2p[n2}, den1p[n3] ;
 long long num1e, num2e, den1e ;

 for ( i := 2 ; i <= n1 ; i++ ) { 
	num1p[i-2] = i ; }
 num1 = scaled_prod( n1-1, num1p, &num1e ) ;

 for ( i := 2 ; i <= n2 ; i++ ) { 
	num2p[i-2] = i ; }
 num2 = scaled_prod( n2-1, num2p, &num2e ) ;

 for ( i := 2 ; i <= n3 ; i++ ) { 
	den1p[i-2] = i ; }
 den1 = scaled_prod( n3-1, den1p, &den1e ) ;

 quot = scalb( num1 * num2 / den1, num1e + num2e - den1e) ;

This small part of the Clebsch-Gordan/Wigner computation
is fairly easy to understand as an example.
The other scaled_prodsum and scaled_proddiff functions
accommodate more complicated factors like (x[i]+y[i]) and (x[i]-y[i]) 
respectively.
 



More information about the Cfp-interest mailing list