LCOV - code coverage report
Current view: directory - frmts/grib/degrib18/g2clib-1.0.4 - rdieee.c (source / functions) Found Hit Coverage
Test: gdal_filtered.info Lines: 24 18 75.0 %
Date: 2011-12-18 Functions: 1 1 100.0 %

       1                 : #include "grib2.h"
       2                 : 
       3               4 : void rdieee(g2int *rieee,g2float *a,g2int num)
       4                 : //$$$  SUBPROGRAM DOCUMENTATION BLOCK
       5                 : //                .      .    .                                       .
       6                 : // SUBPROGRAM:    rdieee 
       7                 : //   PRGMMR: Gilbert         ORG: W/NP11    DATE: 2002-10-25
       8                 : //
       9                 : // ABSTRACT: This subroutine reads a list of real values in 
      10                 : //   32-bit IEEE floating point format.
      11                 : //
      12                 : // PROGRAM HISTORY LOG:
      13                 : // 2002-10-25  Gilbert
      14                 : //
      15                 : // USAGE:    void rdieee(g2int *rieee,g2float *a,g2int num)
      16                 : //   INPUT ARGUMENT LIST:
      17                 : //     rieee    - g2int array of floating point values in 32-bit IEEE format.
      18                 : //     num      - Number of floating point values to convert.
      19                 : //
      20                 : //   OUTPUT ARGUMENT LIST:      
      21                 : //     a        - float array of real values.  a must be allocated with at
      22                 : //                least 4*num bytes of memory before calling this function.
      23                 : //
      24                 : // REMARKS: None
      25                 : //
      26                 : // ATTRIBUTES:
      27                 : //   LANGUAGE: C
      28                 : //   MACHINE:  IBM SP
      29                 : //
      30                 : //$$$
      31                 : {
      32                 : 
      33                 :       g2int  j;
      34                 :       g2int  isign,iexp,imant;
      35                 : 
      36                 :       g2float  sign,temp;
      37                 :       static g2float  two23,two126;
      38                 :       static g2int test=0;
      39               4 :       g2intu msk1=0x80000000;        // 10000000000000000000000000000000 binary
      40               4 :       g2int msk2=0x7F800000;         // 01111111100000000000000000000000 binary
      41               4 :       g2int msk3=0x007FFFFF;         // 00000000011111111111111111111111 binary
      42                 : 
      43               4 :       if ( test == 0 ) {
      44               1 :          two23=(g2float)int_power(2.0,-23);
      45               1 :          two126=(g2float)int_power(2.0,-126);
      46               1 :          test=1;
      47                 :       }
      48                 : 
      49               8 :       for (j=0;j<num;j++) {
      50                 : //
      51                 : //  Extract sign bit, exponent, and mantissa
      52                 : //
      53               4 :         isign=(rieee[j]&msk1)>>31;
      54               4 :         iexp=(rieee[j]&msk2)>>23;
      55               4 :         imant=(rieee[j]&msk3);
      56                 :         //printf("SAGieee= %ld %ld %ld\n",isign,iexp,imant);
      57                 : 
      58               4 :         sign=1.0;
      59               4 :         if (isign == 1) sign=-1.0;
      60                 :         
      61               8 :         if ( (iexp > 0) && (iexp < 255) ) {
      62               4 :           temp=(g2float)int_power(2.0,(iexp-127));
      63               4 :           a[j]=sign*temp*(1.0+(two23*(g2float)imant));
      64                 :         }
      65               0 :         else if ( iexp == 0 ) {
      66               0 :           if ( imant != 0 )
      67               0 :             a[j]=sign*two126*two23*(g2float)imant;
      68                 :           else
      69               0 :             a[j]=sign*0.0;
      70                 :           
      71                 :         }
      72               0 :         else if ( iexp == 255 )
      73               0 :            a[j]=sign*(1E+37);
      74                 : 
      75                 : 
      76                 :       }
      77                 : 
      78               4 : }

Generated by: LCOV version 1.7