Skip to content

AFNI/NIfTI Server

Sections
Personal tools
You are here: Home » AFNI » Documentation

Doxygen Source Code Documentation


Main Page   Alphabetical List   Data Structures   File List   Data Fields   Globals   Search  

cdf_71.c

Go to the documentation of this file.
00001 #include "cdflib.h"
00002 double spmpar(int *i)
00003 /*
00004 -----------------------------------------------------------------------
00005  
00006      SPMPAR PROVIDES THE SINGLE PRECISION MACHINE CONSTANTS FOR
00007      THE COMPUTER BEING USED. IT IS ASSUMED THAT THE ARGUMENT
00008      I IS AN INTEGER HAVING ONE OF THE VALUES 1, 2, OR 3. IF THE
00009      SINGLE PRECISION ARITHMETIC BEING USED HAS M BASE B DIGITS AND
00010      ITS SMALLEST AND LARGEST EXPONENTS ARE EMIN AND EMAX, THEN
00011  
00012         SPMPAR(1) = B**(1 - M), THE MACHINE PRECISION,
00013  
00014         SPMPAR(2) = B**(EMIN - 1), THE SMALLEST MAGNITUDE,
00015  
00016         SPMPAR(3) = B**EMAX*(1 - B**(-M)), THE LARGEST MAGNITUDE.
00017  
00018 -----------------------------------------------------------------------
00019      WRITTEN BY
00020         ALFRED H. MORRIS, JR.
00021         NAVAL SURFACE WARFARE CENTER
00022         DAHLGREN VIRGINIA
00023 -----------------------------------------------------------------------
00024 -----------------------------------------------------------------------
00025      MODIFIED BY BARRY W. BROWN TO RETURN DOUBLE PRECISION MACHINE
00026      CONSTANTS FOR THE COMPUTER BEING USED.  THIS MODIFICATION WAS
00027      MADE AS PART OF CONVERTING BRATIO TO DOUBLE PRECISION
00028 -----------------------------------------------------------------------
00029 */
00030 {
00031 static int K1 = 4;
00032 static int K2 = 8;
00033 static int K3 = 9;
00034 static int K4 = 10;
00035 static double spmpar,b,binv,bm1,one,w,z;
00036 static int emax,emin,ibeta,m;
00037 /*
00038      ..
00039      .. Executable Statements ..
00040 */
00041     if(*i > 1) goto S10;
00042     b = ipmpar(&K1);
00043     m = ipmpar(&K2);
00044     spmpar = pow(b,(double)(1-m));
00045     return spmpar;
00046 S10:
00047     if(*i > 2) goto S20;
00048     b = ipmpar(&K1);
00049     emin = ipmpar(&K3);
00050     one = 1.0;
00051     binv = one/b;
00052     w = pow(b,(double)(emin+2));
00053     spmpar = w*binv*binv*binv;
00054     return spmpar;
00055 S20:
00056     ibeta = ipmpar(&K1);
00057     m = ipmpar(&K2);
00058     emax = ipmpar(&K4);
00059     b = ibeta;
00060     bm1 = ibeta-1;
00061     one = 1.0;
00062     z = pow(b,(double)(m-1));
00063     w = ((z-one)*b+bm1)/(b*z);
00064     z = pow(b,(double)(emax-2));
00065     spmpar = w*z*b*b;
00066     return spmpar;
00067 } /* END */
 

Powered by Plone

This site conforms to the following standards: