Changeset 96242 in vbox
- Timestamp:
- Aug 17, 2022 1:59:06 AM (3 years ago)
- svn:sync-xref-src-repo-rev:
- 153054
- Location:
- trunk/src/VBox/Runtime
- Files:
-
- 3 edited
- 2 copied
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Runtime/common/math/cos.asm
r96240 r96242 110 110 fld qword [.s_r64TinyCosTo1 xWrtRIP] 111 111 fcomip st1 112 j be.zero_extra_pop112 ja .zero_extra_pop 113 113 114 114 .not_that_tiny_input: -
trunk/src/VBox/Runtime/common/math/cosf.asm
r96240 r96242 1 1 ; $Id$ 2 2 ;; @file 3 ; IPRT - No-CRT cos - AMD64 & X86.3 ; IPRT - No-CRT cosf - AMD64 & X86. 4 4 ; 5 5 … … 34 34 35 35 ;; 36 ; Compute the cosine of r d, measured in radians.36 ; Compute the cosine of rf, measured in radians. 37 37 ; 38 38 ; @returns st(0) / xmm0 39 ; @param r d[rbp + xCB*2] / xmm040 ; 41 RT_NOCRT_BEGINPROC cos 39 ; @param rf [rbp + xCB*2] / xmm0 40 ; 41 RT_NOCRT_BEGINPROC cosf 42 42 push xBP 43 43 SEH64_PUSH_xBP … … 64 64 ; 65 65 %ifdef RT_ARCH_AMD64 66 movs d[xBP - 10h], xmm067 fld qword [xBP - 10h]66 movss [xBP - 10h], xmm0 67 fld dword [xBP - 10h] 68 68 %else 69 fld qword [xBP + xCB*2]69 fld dword [xBP + xCB*2] 70 70 %endif 71 71 … … 74 74 ; works reliably, so outside that we'll use the FSIN instruction instead 75 75 ; 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) 77 77 ; 78 78 ; We examin the input and weed out non-finit numbers first. … … 110 110 fld qword [.s_r64TinyCosTo1 xWrtRIP] 111 111 fcomip st1 112 j be.zero_extra_pop112 ja .zero_extra_pop 113 113 114 114 .not_that_tiny_input: … … 147 147 ; 148 148 .do_sine: 149 mov ecx, 1; double149 mov ecx, 0 ; double 150 150 extern NAME(rtNoCrtMathSinCore) 151 151 call NAME(rtNoCrtMathSinCore) … … 156 156 .return_val: 157 157 %ifdef RT_ARCH_AMD64 158 fstp qword [xBP - 10h]159 movs dxmm0, [xBP - 10h]158 fstp dword [xBP - 10h] 159 movss xmm0, [xBP - 10h] 160 160 %endif 161 161 %ifdef RT_OS_WINDOWS … … 167 167 168 168 ; 169 ; cos (+/-0) = +1.0169 ; cosf(+/-0) = +1.0 170 170 ; 171 171 .zero_extra_pop: … … 190 190 ; 191 191 ALIGNCODE(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. 193 193 .s_r64TinyCosTo1: 194 dq 7.4505806e-9194 dq 0.000244140625 195 195 196 196 ; The absolute limit for the range which FCOS is expected to produce reasonable results. … … 200 200 .s_r64Two: 201 201 dq 2.0 202 ENDPROC RT_NOCRT(cos )203 202 ENDPROC RT_NOCRT(cosf) 203 -
trunk/src/VBox/Runtime/common/math/sin.asm
r96241 r96242 35 35 36 36 ;; 37 ; Compute the sine of r d, measured in radians.37 ; Compute the sine of rf, measured in radians. 38 38 ; 39 39 ; @returns st(0) / xmm0 40 ; @param r d[rbp + xCB*2] / xmm040 ; @param rf [rbp + xCB*2] / xmm0 41 41 ; 42 42 RT_NOCRT_BEGINPROC sin … … 160 160 161 161 ALIGNCODE(8) 162 ; Ca. 2**- 26, absolute value. Inputs closer to zero than this can be162 ; Ca. 2**-17, absolute value. Inputs closer to zero than this can be 163 163 ; returns directly as the sin(input) value should be basically the same 164 164 ; given the precision we're working with and FSIN probably won't even … … 166 166 ;; @todo experiment when FSIN gets better than this. 167 167 .s_r64Tiny: 168 dq 1.49011612e-8168 dq 0.00000762939453125 169 169 ; The absolute limit of FSIN "good" range. 170 170 .s_r64FSinOkay: -
trunk/src/VBox/Runtime/common/math/sinf.asm
r96241 r96242 1 1 ; $Id$ 2 2 ;; @file 3 ; IPRT - No-CRT sin - AMD64 & X86.3 ; IPRT - No-CRT sinf - AMD64 & X86. 4 4 ; 5 5 … … 40 40 ; @param rd [rbp + xCB*2] / xmm0 41 41 ; 42 RT_NOCRT_BEGINPROC sin 42 RT_NOCRT_BEGINPROC sinf 43 43 push xBP 44 44 SEH64_PUSH_xBP … … 64 64 ; 65 65 %ifdef RT_ARCH_AMD64 66 movs d[xBP - 10h], xmm067 fld qword [xBP - 10h]66 movss [xBP - 10h], xmm0 67 fld dword [xBP - 10h] 68 68 %else 69 fld qword [xBP + xCB*2]69 fld dword [xBP + xCB*2] 70 70 %endif 71 71 … … 115 115 ; Call common sine/cos worker. 116 116 ; 117 mov ecx, 1 ; double117 mov ecx, 0 ; float 118 118 extern NAME(rtNoCrtMathSinCore) 119 119 call NAME(rtNoCrtMathSinCore) … … 124 124 .return_val: 125 125 %ifdef RT_ARCH_AMD64 126 fstp qword [xBP - 10h]127 movs dxmm0, [xBP - 10h]126 fstp dword [xBP - 10h] 127 movss xmm0, [xBP - 10h] 128 128 %endif 129 129 %ifdef RT_OS_WINDOWS … … 136 136 ; 137 137 ; 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. 139 139 ; We can skip the st0 -> xmm0 translation here, so follow the same path 140 140 ; as .zero & .nan, after we've removed the fabs(input) value. … … 144 144 145 145 ; 146 ; sin (+/-0.0) = +/-0.0 (preserve the sign)146 ; sinf(+/-0.0) = +/-0.0 (preserve the sign) 147 147 ; We can skip the st0 -> xmm0 translation here, so follow the .nan code path. 148 148 ; … … 161 161 ALIGNCODE(8) 162 162 ; 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 same163 ; returns directly as the sinf(input) value should be basically the same 164 164 ; given the precision we're working with and FSIN probably won't even 165 165 ; manage that. … … 172 172 ;dq 1.57079632679489661923 ; pi/2 - alternative. 173 173 174 ENDPROC RT_NOCRT(sin )174 ENDPROC RT_NOCRT(sinf) 175 175 -
trunk/src/VBox/Runtime/testcase/tstRTNoCrt-2.cpp
r96240 r96242 2960 2960 2961 2961 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 2963 3033 } 2964 3034 … … 2968 3038 RTTestSub(g_hTest, "cos[f]"); 2969 3039 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 2984 3092 CHECK_DBL_SAME( cos,( 1.0)); 2985 3093 CHECK_DBL_SAME( cos,( 1.5)); … … 2988 3096 CHECK_DBL_SAME( cos,( -0.0)); 2989 3097 CHECK_DBL_SAME( cos,( -0.0)); 3098 CHECK_DBL_SAME( cos,( 238.6634566)); 3099 CHECK_DBL_SAME( cos,( -49.4578999)); 2990 3100 CHECK_DBL_SAME( cos,( +M_PI)); 2991 3101 CHECK_DBL_SAME( cos,( -M_PI)); 3102 #if 0 /* UCRT does not produce 0.0 here, but some 2**-54 value */ 2992 3103 CHECK_DBL_SAME( cos,( +M_PI_2)); 2993 3104 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 3003 3106 CHECK_DBL_SAME( cos,( +INFINITY)); 3004 3107 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))); 3010 3109 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))); 3014 3179 } 3015 3180 … … 3073 3238 testATan2(); 3074 3239 testSin(); 3075 //testCos();3240 testCos(); 3076 3241 3077 3242 #if 0
Note:
See TracChangeset
for help on using the changeset viewer.