VirtualBox

Changeset 96242 in vbox


Ignore:
Timestamp:
Aug 17, 2022 1:59:06 AM (3 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
153054
Message:

IPRT/nocrt: Adapted the reworked sin and cos code for sinf and cosf; fixed a few cos bugs and added tests for cos. bugref:10261

Location:
trunk/src/VBox/Runtime
Files:
3 edited
2 copied

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Runtime/common/math/cos.asm

    r96240 r96242  
    110110        fld     qword [.s_r64TinyCosTo1 xWrtRIP]
    111111        fcomip  st1
    112         jbe      .zero_extra_pop
     112        ja      .zero_extra_pop
    113113
    114114.not_that_tiny_input:
  • trunk/src/VBox/Runtime/common/math/cosf.asm

    r96240 r96242  
    11; $Id$
    22;; @file
    3 ; IPRT - No-CRT cos - AMD64 & X86.
     3; IPRT - No-CRT cosf - AMD64 & X86.
    44;
    55
     
    3434
    3535;;
    36 ; Compute the cosine of rd, measured in radians.
     36; Compute the cosine of rf, measured in radians.
    3737;
    3838; @returns  st(0) / xmm0
    39 ; @param    rd      [rbp + xCB*2] / xmm0
    40 ;
    41 RT_NOCRT_BEGINPROC cos
     39; @param    rf      [rbp + xCB*2] / xmm0
     40;
     41RT_NOCRT_BEGINPROC cosf
    4242        push    xBP
    4343        SEH64_PUSH_xBP
     
    6464        ;
    6565%ifdef RT_ARCH_AMD64
    66         movsd   [xBP - 10h], xmm0
    67         fld     qword [xBP - 10h]
     66        movss   [xBP - 10h], xmm0
     67        fld     dword [xBP - 10h]
    6868%else
    69         fld     qword [xBP + xCB*2]
     69        fld     dword [xBP + xCB*2]
    7070%endif
    7171
     
    7474        ; works reliably, so outside that we'll use the FSIN instruction instead
    7575        ; as it has a larger good range (-5pi/4 to 1pi/4 for cosine).
    76         ; Input conversion follows: cos(x) = sin(x + pi/2)
     76        ; Input conversion follows: cosf(x) = sinf(x + pi/2)
    7777        ;
    7878        ; We examin the input and weed out non-finit numbers first.
     
    110110        fld     qword [.s_r64TinyCosTo1 xWrtRIP]
    111111        fcomip  st1
    112         jbe      .zero_extra_pop
     112        ja      .zero_extra_pop
    113113
    114114.not_that_tiny_input:
     
    147147        ;
    148148.do_sine:
    149         mov     ecx, 1                      ; double
     149        mov     ecx, 0                      ; double
    150150        extern  NAME(rtNoCrtMathSinCore)
    151151        call    NAME(rtNoCrtMathSinCore)
     
    156156.return_val:
    157157%ifdef RT_ARCH_AMD64
    158         fstp    qword [xBP - 10h]
    159         movsd   xmm0, [xBP - 10h]
     158        fstp    dword [xBP - 10h]
     159        movss   xmm0, [xBP - 10h]
    160160%endif
    161161%ifdef RT_OS_WINDOWS
     
    167167
    168168        ;
    169         ; cos(+/-0) = +1.0
     169        ; cosf(+/-0) = +1.0
    170170        ;
    171171.zero_extra_pop:
     
    190190        ;
    191191ALIGNCODE(8)
    192         ; About 2**-27. When fabs(input) is below this limit we can consider cos(input) ~= 1.0.
     192        ; About 2**-18. When fabs(input) is below this limit we can consider cosf(input) ~= 1.0.
    193193.s_r64TinyCosTo1:
    194         dq  7.4505806e-9
     194        dq  0.000244140625
    195195
    196196        ; The absolute limit for the range which FCOS is expected to produce reasonable results.
     
    200200.s_r64Two:
    201201        dq  2.0
    202 ENDPROC   RT_NOCRT(cos)
    203 
     202ENDPROC   RT_NOCRT(cosf)
     203
  • trunk/src/VBox/Runtime/common/math/sin.asm

    r96241 r96242  
    3535
    3636;;
    37 ; Compute the sine of rd, measured in radians.
     37; Compute the sine of rf, measured in radians.
    3838;
    3939; @returns  st(0) / xmm0
    40 ; @param    rd      [rbp + xCB*2] / xmm0
     40; @param    rf      [rbp + xCB*2] / xmm0
    4141;
    4242RT_NOCRT_BEGINPROC sin
     
    160160
    161161ALIGNCODE(8)
    162         ; Ca. 2**-26, absolute value. Inputs closer to zero than this can be
     162        ; Ca. 2**-17, absolute value. Inputs closer to zero than this can be
    163163        ; returns directly as the sin(input) value should be basically the same
    164164        ; given the precision we're working with and FSIN probably won't even
     
    166166        ;; @todo experiment when FSIN gets better than this.
    167167.s_r64Tiny:
    168         dq      1.49011612e-8
     168        dq      0.00000762939453125
    169169        ; The absolute limit of FSIN "good" range.
    170170.s_r64FSinOkay:
  • trunk/src/VBox/Runtime/common/math/sinf.asm

    r96241 r96242  
    11; $Id$
    22;; @file
    3 ; IPRT - No-CRT sin - AMD64 & X86.
     3; IPRT - No-CRT sinf - AMD64 & X86.
    44;
    55
     
    4040; @param    rd      [rbp + xCB*2] / xmm0
    4141;
    42 RT_NOCRT_BEGINPROC sin
     42RT_NOCRT_BEGINPROC sinf
    4343        push    xBP
    4444        SEH64_PUSH_xBP
     
    6464        ;
    6565%ifdef RT_ARCH_AMD64
    66         movsd   [xBP - 10h], xmm0
    67         fld     qword [xBP - 10h]
     66        movss   [xBP - 10h], xmm0
     67        fld     dword [xBP - 10h]
    6868%else
    69         fld     qword [xBP + xCB*2]
     69        fld     dword [xBP + xCB*2]
    7070%endif
    7171
     
    115115        ; Call common sine/cos worker.
    116116        ;
    117         mov     ecx, 1                      ; double
     117        mov     ecx, 0                      ; float
    118118        extern  NAME(rtNoCrtMathSinCore)
    119119        call    NAME(rtNoCrtMathSinCore)
     
    124124.return_val:
    125125%ifdef RT_ARCH_AMD64
    126         fstp    qword [xBP - 10h]
    127         movsd   xmm0, [xBP - 10h]
     126        fstp    dword [xBP - 10h]
     127        movss   xmm0, [xBP - 10h]
    128128%endif
    129129%ifdef RT_OS_WINDOWS
     
    136136        ;
    137137        ; As explained already, we can return tiny numbers directly too as the
    138         ; output from sin(input) = input given our precision.
     138        ; output from sinf(input) = input given our precision.
    139139        ; We can skip the st0 -> xmm0 translation here, so follow the same path
    140140        ; as .zero & .nan, after we've removed the fabs(input) value.
     
    144144
    145145        ;
    146         ; sin(+/-0.0) = +/-0.0 (preserve the sign)
     146        ; sinf(+/-0.0) = +/-0.0 (preserve the sign)
    147147        ; We can skip the st0 -> xmm0 translation here, so follow the .nan code path.
    148148        ;
     
    161161ALIGNCODE(8)
    162162        ; Ca. 2**-26, absolute value. Inputs closer to zero than this can be
    163         ; returns directly as the sin(input) value should be basically the same
     163        ; returns directly as the sinf(input) value should be basically the same
    164164        ; given the precision we're working with and FSIN probably won't even
    165165        ; manage that.
     
    172172        ;dq      1.57079632679489661923  ; pi/2 - alternative.
    173173
    174 ENDPROC   RT_NOCRT(sin)
     174ENDPROC   RT_NOCRT(sinf)
    175175
  • trunk/src/VBox/Runtime/testcase/tstRTNoCrt-2.cpp

    r96240 r96242  
    29602960
    29612961
    2962 
     2962    CHECK_FLT(      RT_NOCRT(sinf)(                          +0.0f),                           +0.0f);
     2963    CHECK_FLT(      RT_NOCRT(sinf)(                          -0.0f),                           -0.0f);
     2964    CHECK_FLT(      RT_NOCRT(sinf)(                   (float)+M_PI),                           +0.0f);
     2965    CHECK_FLT(      RT_NOCRT(sinf)(                   (float)-M_PI),                           +0.0f);
     2966    CHECK_FLT(      RT_NOCRT(sinf)(                 (float)+M_PI_2),                           +1.0f);
     2967    CHECK_FLT(      RT_NOCRT(sinf)(                 (float)-M_PI_2),                           -1.0f);
     2968    CHECK_FLT(      RT_NOCRT(sinf)(      (float)(+M_PI_2 + M_PI*4)),                           +1.0f);
     2969    CHECK_FLT(      RT_NOCRT(sinf)(      (float)(-M_PI_2 - M_PI*4)),                           -1.0f);
     2970
     2971    CHECK_FLT(      RT_NOCRT(sinf)(      (float)(+M_PI_2 + M_PI*2)),                           +1.0f);
     2972    CHECK_FLT(      RT_NOCRT(sinf)(      (float)(-M_PI_2 - M_PI*2)),                           -1.0f);
     2973    CHECK_FLT(      RT_NOCRT(sinf)(                          +1.0f),            +0.841470956802368f);
     2974    CHECK_FLT(      RT_NOCRT(sinf)(                          +2.0f),            +0.909297406673431f);
     2975    CHECK_FLT(      RT_NOCRT(sinf)(                          +3.0f),            +0.141120001673698f);
     2976    CHECK_FLT(      RT_NOCRT(sinf)(                          +4.0f),            -0.756802499294281f);
     2977    CHECK_FLT(      RT_NOCRT(sinf)(                          +5.0f),            -0.958924293518066f);
     2978    CHECK_FLT(      RT_NOCRT(sinf)(                          +6.0f),            -0.279415488243103f);
     2979    CHECK_FLT(      RT_NOCRT(sinf)(                          +7.0f),            +0.656986594200134f);
     2980    CHECK_FLT(      RT_NOCRT(sinf)(                          +8.0f),            +0.989358246326447f);
     2981    CHECK_FLT(      RT_NOCRT(sinf)(                          +9.0f),            +0.412118494510651f);
     2982    CHECK_FLT(      RT_NOCRT(sinf)(                         +10.0f),            -0.544021129608154f);
     2983    CHECK_FLT(      RT_NOCRT(sinf)(                        +100.0f),            -0.506365656852722f);
     2984    CHECK_FLT(      RT_NOCRT(sinf)(                +654.216812456f),            +0.692915558815002f);
     2985    CHECK_FLT(      RT_NOCRT(sinf)(             10.10101010101010f),            -0.625858962535858f);
     2986    CHECK_FLT(      RT_NOCRT(sinf)(            +25.25252525252525f),            +0.119497857987881f);
     2987    CHECK_FLT(      RT_NOCRT(sinf)(           +252.25252525252525f),            +0.798684179782867f);
     2988    CHECK_FLT(      RT_NOCRT(sinf)(          +2525.25252525252525f),            -0.554741382598877f);
     2989    CHECK_FLT(      RT_NOCRT(sinf)(         +25252.25252525252525f),            +0.129835993051529f);
     2990    CHECK_FLT(      RT_NOCRT(sinf)(        +252525.25252525252525f),            -0.777645349502563f);
     2991
     2992    CHECK_FLT(      RT_NOCRT(sinf)(                          -1.0f),            -0.841470956802368f);
     2993    CHECK_FLT(      RT_NOCRT(sinf)(                          -2.0f),            -0.909297406673431f);
     2994    CHECK_FLT(      RT_NOCRT(sinf)(                          -3.0f),            -0.141120001673698f);
     2995    CHECK_FLT(      RT_NOCRT(sinf)(                          -4.0f),            +0.756802499294281f);
     2996    CHECK_FLT(      RT_NOCRT(sinf)(                          -5.0f),            +0.958924293518066f);
     2997    CHECK_FLT(      RT_NOCRT(sinf)(                          -6.0f),            +0.279415488243103f);
     2998    CHECK_FLT(      RT_NOCRT(sinf)(                          -7.0f),            -0.656986594200134f);
     2999    CHECK_FLT(      RT_NOCRT(sinf)(                          -8.0f),            -0.989358246326447f);
     3000    CHECK_FLT(      RT_NOCRT(sinf)(                          -9.0f),            -0.412118494510651f);
     3001    CHECK_FLT(      RT_NOCRT(sinf)(                         -10.0f),            +0.544021129608154f);
     3002    CHECK_FLT(      RT_NOCRT(sinf)(                        -100.0f),            +0.506365656852722f);
     3003    CHECK_FLT(      RT_NOCRT(sinf)(                -654.216812456f),            -0.692915558815002f);
     3004    CHECK_FLT(      RT_NOCRT(sinf)(            -10.10101010101010f),            +0.625858962535858f);
     3005    CHECK_FLT(      RT_NOCRT(sinf)(            -25.25252525252525f),            -0.119497857987881f);
     3006    CHECK_FLT(      RT_NOCRT(sinf)(           -252.25252525252525f),            -0.798684179782867f);
     3007    CHECK_FLT(      RT_NOCRT(sinf)(          -2525.25252525252525f),            +0.554741382598877f);
     3008    CHECK_FLT(      RT_NOCRT(sinf)(         -25252.25252525252525f),            -0.129835993051529f);
     3009    CHECK_FLT(      RT_NOCRT(sinf)(        -252525.25252525252525f),            +0.777645349502563f);
     3010    CHECK_FLT(      RT_NOCRT(sinf)(      RTStrNanDouble("s", true)),       RTStrNanDouble("s", true));
     3011    CHECK_FLT(      RT_NOCRT(sinf)( RTStrNanDouble("9999s", false)),  RTStrNanDouble("9999s", false));
     3012
     3013    CHECK_FLT_SAME(    sinf,(              1.0f));
     3014    CHECK_FLT_SAME(    sinf,(              1.5f));
     3015    CHECK_FLT_SAME(    sinf,(             +0.0f));
     3016    CHECK_FLT_SAME(    sinf,(             +0.0f));
     3017    CHECK_FLT_SAME(    sinf,(             -0.0f));
     3018    CHECK_FLT_SAME(    sinf,(             -0.0f));
     3019    CHECK_FLT_SAME(    sinf,(            -10.0f));
     3020#if 0 /* UCRT returns tiny fractions for these in the 2**-53 range, we return 0.0 */
     3021    CHECK_FLT_SAME(    sinf,(      (float)+M_PI));
     3022    CHECK_FLT_SAME(    sinf,(      (float)-M_PI));
     3023#endif
     3024    CHECK_FLT_SAME(    sinf,(    (float)+M_PI_2));
     3025    CHECK_FLT_SAME(    sinf,(    (float)-M_PI_2));
     3026    CHECK_FLT_SAME(    sinf,(  (float)+INFINITY));
     3027    CHECK_FLT_SAME(    sinf,(  (float)-INFINITY));
     3028    CHECK_FLT_SAME(    sinf,(RTStrNanDouble(NULL, true)));
     3029#if 0 /*UCRT converts these to quiet ones, we check above */
     3030    //CHECK_FLT_SAME(    sin,(RTStrNanDouble("s",  true)));
     3031    //CHECK_FLT_SAME(    sin,(RTStrNanDouble("s", false)));
     3032#endif
    29633033}
    29643034
     
    29683038    RTTestSub(g_hTest, "cos[f]");
    29693039
    2970     CHECK_DBL(RT_NOCRT(cos)(             +0.0),     1.0);
    2971     CHECK_DBL(          cos(             +0.0),     1.0);
    2972     CHECK_DBL(RT_NOCRT(cos)(            +M_PI),    -1.0);
    2973     CHECK_DBL(          cos(            +M_PI),    -1.0);
    2974     CHECK_DBL(RT_NOCRT(cos)(            -M_PI),    -1.0);
    2975     CHECK_DBL(          cos(            -M_PI),    -1.0);
    2976     CHECK_DBL(RT_NOCRT(cos)(          +M_PI_2),     0.0);
    2977     CHECK_DBL(          cos(          +M_PI_2),     0.0);
    2978     CHECK_DBL(RT_NOCRT(cos)(          -M_PI_2),     0.0);
    2979     CHECK_DBL(          cos(          -M_PI_2),     0.0);
    2980     CHECK_DBL(RT_NOCRT(cos)(             +1.0), +M_PI_4);
    2981     CHECK_DBL(          cos(             +1.0), +M_PI_4);
    2982     CHECK_DBL(RT_NOCRT(cos)(             -1.0), -M_PI_4);
    2983     CHECK_DBL(          cos(             -1.0), -M_PI_4);
     3040    /* See comment in testSin regarding testing and accuracy. */
     3041    CHECK_DBL(      RT_NOCRT(cos)(                          +0.0),                           +1.0);
     3042    CHECK_DBL(      RT_NOCRT(cos)(                          -0.0),                           +1.0);
     3043    CHECK_DBL(      RT_NOCRT(cos)(                         +M_PI),                           -1.0);
     3044    CHECK_DBL(      RT_NOCRT(cos)(                         -M_PI),                           -1.0);
     3045    CHECK_DBL(      RT_NOCRT(cos)(                       +M_PI_2),                            0.0);
     3046    CHECK_DBL(      RT_NOCRT(cos)(                       -M_PI_2),                            0.0);
     3047    CHECK_DBL(      RT_NOCRT(cos)(            +(M_PI_2 + M_PI*4)),                            0.0);
     3048    CHECK_DBL(      RT_NOCRT(cos)(            -(M_PI_2 + M_PI*4)),                            0.0);
     3049    CHECK_DBL(      RT_NOCRT(cos)(            +(M_PI_2 + M_PI*2)),                            0.0);
     3050    CHECK_DBL(      RT_NOCRT(cos)(            -(M_PI_2 + M_PI*2)),                            0.0);
     3051    CHECK_DBL(      RT_NOCRT(cos)(                          +1.0),        +0.54030230586813976501);
     3052    CHECK_DBL(      RT_NOCRT(cos)(                          +2.0),        -0.41614683654714240690);
     3053    CHECK_DBL(      RT_NOCRT(cos)(                          +3.0),        -0.98999249660044541521);
     3054    CHECK_DBL(      RT_NOCRT(cos)(                          +4.0),        -0.65364362086361194049);
     3055    CHECK_DBL(      RT_NOCRT(cos)(                          +5.0),        +0.28366218546322624627);
     3056    CHECK_DBL(      RT_NOCRT(cos)(                          +6.0),        +0.96017028665036596724);
     3057    CHECK_DBL(      RT_NOCRT(cos)(                          +7.0),        +0.75390225434330460086);
     3058    CHECK_DBL(      RT_NOCRT(cos)(                          +8.0),        -0.14550003380861353808);
     3059    CHECK_DBL(      RT_NOCRT(cos)(                          +9.0),        -0.91113026188467693967);
     3060    CHECK_DBL(      RT_NOCRT(cos)(                         +10.0),        -0.83907152907645243811);
     3061    CHECK_DBL(      RT_NOCRT(cos)(                        +100.0),        +0.86231887228768389075);
     3062    CHECK_DBL(      RT_NOCRT(cos)(                +654.216812456),        +0.72100792937456847920);
     3063    CHECK_DBL(      RT_NOCRT(cos)(             10.10101010101010),        -0.77993639757431598714);
     3064    CHECK_DBL(      RT_NOCRT(cos)(            +25.25252525252525),        +0.99283446768532801485);
     3065    CHECK_DBL(      RT_NOCRT(cos)(           +252.25252525252525),        +0.60174437207476427769);
     3066    CHECK_DBL(      RT_NOCRT(cos)(          +2525.25252525252525),        +0.83206935882500765445);
     3067    CHECK_DBL_RANGE(RT_NOCRT(cos)(         +25252.25252525252525),        +0.99146103849485722748, 0.0000000000000010000);
     3068    CHECK_DBL_RANGE(RT_NOCRT(cos)(        +252525.25252525252525),        -0.62673747861155237882, 0.0000000000000100000);
     3069    CHECK_DBL(      RT_NOCRT(cos)(                          3.14),        -0.99999873172753950268);
     3070    CHECK_DBL(      RT_NOCRT(cos)(                          -1.0),        +0.54030230586813976501);
     3071    CHECK_DBL(      RT_NOCRT(cos)(                          -2.0),        -0.41614683654714240690);
     3072    CHECK_DBL(      RT_NOCRT(cos)(                          -3.0),        -0.98999249660044541521);
     3073    CHECK_DBL(      RT_NOCRT(cos)(                          -4.0),        -0.65364362086361194049);
     3074    CHECK_DBL(      RT_NOCRT(cos)(                          -5.0),        +0.28366218546322624627);
     3075    CHECK_DBL(      RT_NOCRT(cos)(                          -6.0),        +0.96017028665036596724);
     3076    CHECK_DBL(      RT_NOCRT(cos)(                          -7.0),        +0.75390225434330460086);
     3077    CHECK_DBL(      RT_NOCRT(cos)(                          -8.0),        -0.14550003380861353808);
     3078    CHECK_DBL(      RT_NOCRT(cos)(                          -9.0),        -0.91113026188467693967);
     3079    CHECK_DBL(      RT_NOCRT(cos)(                         -10.0),        -0.83907152907645243811);
     3080    CHECK_DBL(      RT_NOCRT(cos)(                        -100.0),        +0.86231887228768389075);
     3081    CHECK_DBL(      RT_NOCRT(cos)(                -654.216812456),        +0.72100792937456847920);
     3082    CHECK_DBL(      RT_NOCRT(cos)(            -10.10101010101010),        -0.77993639757431598714);
     3083    CHECK_DBL(      RT_NOCRT(cos)(            -25.25252525252525),        +0.99283446768532801485);
     3084    CHECK_DBL(      RT_NOCRT(cos)(           -252.25252525252525),        +0.60174437207476427769);
     3085    CHECK_DBL(      RT_NOCRT(cos)(          -2525.25252525252525),        +0.83206935882500765445);
     3086    CHECK_DBL_RANGE(RT_NOCRT(cos)(         -25252.25252525252525),        +0.99146103849485722748, 0.0000000000000010000);
     3087    CHECK_DBL_RANGE(RT_NOCRT(cos)(        -252525.25252525252525),        -0.62673747861155237882, 0.0000000000000100000);
     3088    CHECK_DBL(      RT_NOCRT(cos)(                         -3.14),        -0.99999873172753950268);
     3089    CHECK_DBL(      RT_NOCRT(cos)( RTStrNanDouble("123s", false)),  RTStrNanDouble("123s", false));
     3090    CHECK_DBL(      RT_NOCRT(cos)( RTStrNanDouble("9991s", true)),  RTStrNanDouble("9991s", true));
     3091
    29843092    CHECK_DBL_SAME(    cos,(              1.0));
    29853093    CHECK_DBL_SAME(    cos,(              1.5));
     
    29883096    CHECK_DBL_SAME(    cos,(             -0.0));
    29893097    CHECK_DBL_SAME(    cos,(             -0.0));
     3098    CHECK_DBL_SAME(    cos,(      238.6634566));
     3099    CHECK_DBL_SAME(    cos,(      -49.4578999));
    29903100    CHECK_DBL_SAME(    cos,(            +M_PI));
    29913101    CHECK_DBL_SAME(    cos,(            -M_PI));
     3102#if 0  /* UCRT does not produce 0.0 here, but some 2**-54 value */
    29923103    CHECK_DBL_SAME(    cos,(          +M_PI_2));
    29933104    CHECK_DBL_SAME(    cos,(          -M_PI_2));
    2994 #if 0
    2995     CHECK_DBL_SAME(    cos,(      238.6634566));
    2996     CHECK_DBL_SAME(    cos,(      -49.4578999));
    2997     CHECK_DBL_SAME(    cos,(         999999.0));
    2998     CHECK_DBL_SAME(    cos,(        -999999.0));
    2999     CHECK_DBL_SAME(    cos,(        -999999.0));
    3000     CHECK_DBL_SAME(    cos,(         999999.0));
    3001     CHECK_DBL_SAME(    cos,(      39560.32334));
    3002     CHECK_DBL_SAME(    cos,(      39560.32334));
     3105#endif
    30033106    CHECK_DBL_SAME(    cos,(        +INFINITY));
    30043107    CHECK_DBL_SAME(    cos,(        -INFINITY));
    3005     CHECK_DBL_SAME(    cos,(         +DBL_MAX));
    3006     CHECK_DBL_SAME(    cos,(         -DBL_MAX));
    3007     CHECK_DBL_SAME(    cos,(2.34960584706e100));
    3008     CHECK_DBL_SAME(    cos,(2.34960584706e300));
    3009     CHECK_DBL_SAME(    cos,(2.34960584706e300));
     3108    CHECK_DBL_SAME(    cos,(RTStrNanDouble(NULL, false)));
    30103109    CHECK_DBL_SAME(    cos,(RTStrNanDouble(NULL, true)));
    3011     CHECK_DBL_SAME(    cos,(RTStrNanDouble("s",  true)));
    3012     CHECK_DBL_SAME(    cos,(RTStrNanDouble("s", false)));
    3013 #endif
     3110
     3111
     3112    CHECK_FLT(      RT_NOCRT(cosf)(                          +0.0f),                          +1.0f);
     3113    CHECK_FLT(      RT_NOCRT(cosf)(                          -0.0f),                          +1.0f);
     3114    CHECK_FLT(      RT_NOCRT(cosf)(                   +(float)M_PI),                          -1.0f);
     3115    CHECK_FLT(      RT_NOCRT(cosf)(                   -(float)M_PI),                          -1.0f);
     3116    CHECK_FLT(      RT_NOCRT(cosf)(                 +(float)M_PI_2),                           0.0f);
     3117    CHECK_FLT(      RT_NOCRT(cosf)(                 -(float)M_PI_2),                           0.0f);
     3118    CHECK_FLT(      RT_NOCRT(cosf)(      +(float)(M_PI_2 + M_PI*4)),                           0.0f);
     3119    CHECK_FLT(      RT_NOCRT(cosf)(      -(float)(M_PI_2 + M_PI*4)),                           0.0f);
     3120    CHECK_FLT(      RT_NOCRT(cosf)(      +(float)(M_PI_2 + M_PI*2)),                           0.0f);
     3121    CHECK_FLT(      RT_NOCRT(cosf)(      -(float)(M_PI_2 + M_PI*2)),                           0.0f);
     3122    CHECK_FLT(      RT_NOCRT(cosf)(                          +1.0f),            +0.540302276611328f);
     3123    CHECK_FLT(      RT_NOCRT(cosf)(                          +2.0f),            -0.416146844625473f);
     3124    CHECK_FLT(      RT_NOCRT(cosf)(                          +3.0f),            -0.989992499351501f);
     3125    CHECK_FLT(      RT_NOCRT(cosf)(                          +4.0f),            -0.653643608093262f);
     3126    CHECK_FLT(      RT_NOCRT(cosf)(                          +5.0f),            +0.283662199974060f);
     3127    CHECK_FLT(      RT_NOCRT(cosf)(                          +6.0f),            +0.960170269012451f);
     3128    CHECK_FLT(      RT_NOCRT(cosf)(                          +7.0f),            +0.753902256488800f);
     3129    CHECK_FLT(      RT_NOCRT(cosf)(                          +8.0f),            -0.145500034093857f);
     3130    CHECK_FLT(      RT_NOCRT(cosf)(                          +9.0f),            -0.911130249500275f);
     3131    CHECK_FLT(      RT_NOCRT(cosf)(                         +10.0f),            -0.839071512222290f);
     3132    CHECK_FLT(      RT_NOCRT(cosf)(                        +100.0f),            +0.862318873405457f);
     3133    CHECK_FLT(      RT_NOCRT(cosf)(                +654.216812456f),            +0.721018731594086f);
     3134    CHECK_FLT(      RT_NOCRT(cosf)(             10.10101010101010f),            -0.779936254024506f);
     3135    CHECK_FLT(      RT_NOCRT(cosf)(            +25.25252525252525f),            +0.992834448814392f);
     3136    CHECK_FLT(      RT_NOCRT(cosf)(           +252.25252525252525f),            +0.601750433444977f);
     3137    CHECK_FLT(      RT_NOCRT(cosf)(          +2525.25252525252525f),            +0.832022845745087f);
     3138    CHECK_FLT(      RT_NOCRT(cosf)(         +25252.25252525252525f),            +0.991535484790802f);
     3139    CHECK_FLT(      RT_NOCRT(cosf)(        +252525.25252525252525f),            -0.628703236579895f);
     3140    CHECK_FLT(      RT_NOCRT(cosf)(                         +3.14f),            -0.999998748302460f);
     3141    CHECK_FLT(      RT_NOCRT(cosf)(                          -1.0f),            +0.540302276611328f);
     3142    CHECK_FLT(      RT_NOCRT(cosf)(                          -2.0f),            -0.416146844625473f);
     3143    CHECK_FLT(      RT_NOCRT(cosf)(                          -3.0f),            -0.989992499351501f);
     3144    CHECK_FLT(      RT_NOCRT(cosf)(                          -4.0f),            -0.653643608093262f);
     3145    CHECK_FLT(      RT_NOCRT(cosf)(                          -5.0f),            +0.283662199974060f);
     3146    CHECK_FLT(      RT_NOCRT(cosf)(                          -6.0f),            +0.960170269012451f);
     3147    CHECK_FLT(      RT_NOCRT(cosf)(                          -7.0f),            +0.753902256488800f);
     3148    CHECK_FLT(      RT_NOCRT(cosf)(                          -8.0f),            -0.145500034093857f);
     3149    CHECK_FLT(      RT_NOCRT(cosf)(                          -9.0f),            -0.911130249500275f);
     3150    CHECK_FLT(      RT_NOCRT(cosf)(                         -10.0f),            -0.839071512222290f);
     3151    CHECK_FLT(      RT_NOCRT(cosf)(                        -100.0f),            +0.862318873405457f);
     3152    CHECK_FLT(      RT_NOCRT(cosf)(                -654.216812456f),            +0.721018731594086f);
     3153    CHECK_FLT(      RT_NOCRT(cosf)(            -10.10101010101010f),            -0.779936254024506f);
     3154    CHECK_FLT(      RT_NOCRT(cosf)(            -25.25252525252525f),            +0.992834448814392f);
     3155    CHECK_FLT(      RT_NOCRT(cosf)(           -252.25252525252525f),            +0.601750433444977f);
     3156    CHECK_FLT(      RT_NOCRT(cosf)(          -2525.25252525252525f),            +0.832022845745087f);
     3157    CHECK_FLT(      RT_NOCRT(cosf)(         -25252.25252525252525f),            +0.991535484790802f);
     3158    CHECK_FLT(      RT_NOCRT(cosf)(        -252525.25252525252525f),            -0.628703236579895f);
     3159    CHECK_FLT(      RT_NOCRT(cosf)(                         -3.14f),            -0.999998748302460f);
     3160    CHECK_FLT(      RT_NOCRT(cosf)(  RTStrNanFloat("123s", false)),   RTStrNanFloat("123s", false));
     3161    CHECK_FLT(      RT_NOCRT(cosf)(  RTStrNanFloat("9991s", true)),   RTStrNanFloat("9991s", true));
     3162
     3163    CHECK_FLT_SAME(    cos,(              1.0f));
     3164    CHECK_FLT_SAME(    cos,(              1.5f));
     3165    CHECK_FLT_SAME(    cos,(             +0.0f));
     3166    CHECK_FLT_SAME(    cos,(             +0.0f));
     3167    CHECK_FLT_SAME(    cos,(             -0.0f));
     3168    CHECK_FLT_SAME(    cos,(             -0.0f));
     3169    CHECK_FLT_SAME(    cos,(      238.6634566f));
     3170    CHECK_FLT_SAME(    cos,(      -49.4578999f));
     3171    CHECK_FLT_SAME(    cos,(      +(float)M_PI));
     3172    CHECK_FLT_SAME(    cos,(      -(float)M_PI));
     3173    CHECK_FLT_SAME(    cos,(    +(float)M_PI_2));
     3174    CHECK_FLT_SAME(    cos,(    -(float)M_PI_2));
     3175    CHECK_FLT_SAME(    cos,(  +(float)INFINITY));
     3176    CHECK_FLT_SAME(    cos,(  -(float)INFINITY));
     3177    CHECK_FLT_SAME(    cos,(RTStrNanFloat(NULL, false)));
     3178    CHECK_FLT_SAME(    cos,(RTStrNanFloat(NULL, true)));
    30143179}
    30153180
     
    30733238    testATan2();
    30743239    testSin();
    3075     //testCos();
     3240    testCos();
    30763241
    30773242#if 0
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette