LCOV - code coverage report
Current view: top level - src - s_cosf.c (source / functions) Coverage Total Hit
Test: app.info Lines: 74.1 % 27 20
Test Date: 2024-01-11 15:52:50 Functions: 100.0 % 1 1
Branches: 60.7 % 28 17

             Branch data     Line data    Source code
       1                 :             : /* s_cosf.c -- float version of s_cos.c.
       2                 :             :  * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com.
       3                 :             :  * Optimized by Bruce D. Evans.
       4                 :             :  */
       5                 :             : 
       6                 :             : /*
       7                 :             :  * ====================================================
       8                 :             :  * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
       9                 :             :  *
      10                 :             :  * Developed at SunPro, a Sun Microsystems, Inc. business.
      11                 :             :  * Permission to use, copy, modify, and distribute this
      12                 :             :  * software is freely granted, provided that this notice
      13                 :             :  * is preserved.
      14                 :             :  * ====================================================
      15                 :             :  */
      16                 :             : 
      17                 :             : #include "cdefs-compat.h"
      18                 :             : //__FBSDID("$FreeBSD: src/lib/msun/src/s_cosf.c,v 1.18 2008/02/25 22:19:17 bde Exp $");
      19                 :             : 
      20                 :             : #include <float.h>
      21                 :             : #include <openlibm_math.h>
      22                 :             : 
      23                 :             : //#define       INLINE_KERNEL_COSDF
      24                 :             : //#define       INLINE_KERNEL_SINDF
      25                 :             : //#define INLINE_REM_PIO2F
      26                 :             : #include "math_private.h"
      27                 :             : //#include "e_rem_pio2f.c"
      28                 :             : //#include "k_cosf.c"
      29                 :             : //#include "k_sinf.c"
      30                 :             : 
      31                 :             : /* Small multiples of pi/2 rounded to double precision. */
      32                 :             : static const double
      33                 :             : c1pio2 = 1*M_PI_2,                      /* 0x3FF921FB, 0x54442D18 */
      34                 :             : c2pio2 = 2*M_PI_2,                      /* 0x400921FB, 0x54442D18 */
      35                 :             : c3pio2 = 3*M_PI_2,                      /* 0x4012D97C, 0x7F3321D2 */
      36                 :             : c4pio2 = 4*M_PI_2;                      /* 0x401921FB, 0x54442D18 */
      37                 :             : 
      38                 :             : OLM_DLLEXPORT float
      39                 :          90 : cosf(float x)
      40                 :             : {
      41                 :             :         double y;
      42                 :             :         int32_t n, hx, ix;
      43                 :             : 
      44                 :          90 :         GET_FLOAT_WORD(hx,x);
      45                 :          90 :         ix = hx & 0x7fffffff;
      46                 :             : 
      47         [ +  + ]:          90 :         if(ix <= 0x3f490fda) {               /* |x| ~<= pi/4 */
      48         [ +  + ]:           4 :             if(ix<0x39800000)                /* |x| < 2**-12 */
      49         [ +  - ]:           3 :                 if(((int)x)==0) return 1.0;     /* 1 with inexact if x != 0 */
      50                 :           1 :             return __kernel_cosdf(x);
      51                 :             :         }
      52         [ +  + ]:          86 :         if(ix<=0x407b53d1) {         /* |x| ~<= 5*pi/4 */
      53         [ +  - ]:          19 :             if(ix<=0x4016cbe3) {     /* |x|  ~> 3*pi/4 */
      54         [ +  - ]:          19 :                 if(hx>0)
      55                 :          19 :                     return __kernel_sindf(c1pio2 - x);
      56                 :             :                 else
      57                 :           0 :                     return __kernel_sindf(x + c1pio2);
      58                 :             :             } else
      59         [ #  # ]:           0 :                 return -__kernel_cosdf(x + (hx > 0 ? -c2pio2 : c2pio2));
      60                 :             :         }
      61         [ +  + ]:          67 :         if(ix<=0x40e231d5) {         /* |x| ~<= 9*pi/4 */
      62         [ +  - ]:          16 :             if(ix<=0x40afeddf) {     /* |x|  ~> 7*pi/4 */
      63         [ +  - ]:          16 :                 if(hx>0)
      64                 :          16 :                     return __kernel_sindf(x - c3pio2);
      65                 :             :                 else
      66                 :           0 :                     return __kernel_sindf(-c3pio2 - x);
      67                 :             :             } else
      68         [ #  # ]:           0 :                 return __kernel_cosdf(x + (hx > 0 ? -c4pio2 : c4pio2));
      69                 :             :         }
      70                 :             : 
      71                 :             :     /* cos(Inf or NaN) is NaN */
      72         [ +  + ]:          51 :         else if (ix>=0x7f800000) return x-x;
      73                 :             : 
      74                 :             :     /* general argument reduction needed */
      75                 :             :         else {
      76                 :          48 :             n = __ieee754_rem_pio2f(x,&y);
      77   [ -  +  +  - ]:          48 :             switch(n&3) {
      78                 :           0 :                 case 0: return  __kernel_cosdf(y);
      79                 :          24 :                 case 1: return  __kernel_sindf(-y);
      80                 :          24 :                 case 2: return -__kernel_cosdf(y);
      81                 :           0 :                 default:
      82                 :           0 :                         return  __kernel_sindf(y);
      83                 :             :             }
      84                 :             :         }
      85                 :             : }
        

Generated by: LCOV version 2.0-115.g950771e