@@ -97,8 +97,8 @@ public static Vector512<T> Invoke(Vector512<T> x)
97
97
/// <summary>float.Sin(x)</summary>
98
98
private readonly struct SinOperatorSingle : IUnaryOperator < float , float >
99
99
{
100
- internal const uint SignMask = 0x7FFFFFFFu ;
101
100
internal const uint MaxVectorizedValue = 0x49800000u ;
101
+ internal const uint SignMask = 0x7FFFFFFFu ;
102
102
private const float AlmHuge = 1.2582912e7f ;
103
103
private const float Pi_Tail1 = 8.742278e-8f ;
104
104
private const float Pi_Tail2 = 3.430249e-15f ;
@@ -231,11 +231,17 @@ public static Vector128<double> Invoke(Vector128<double> x)
231
231
return ApplyScalar < SinOperatorDouble > ( x ) ;
232
232
}
233
233
234
+ // dn = |x| * (1 / π)
234
235
Vector128 < double > almHuge = Vector128 . Create ( AlmHuge ) ;
235
236
Vector128 < double > dn = MultiplyAddEstimateOperator < double > . Invoke ( uxMasked , Vector128 . Create ( 1 / double . Pi ) , almHuge ) ;
236
237
Vector128 < ulong > odd = dn . AsUInt64 ( ) << 63 ;
237
238
dn -= almHuge ;
238
- Vector128 < double > f = uxMasked - ( dn * Vector128 . Create ( double . Pi ) ) - ( dn * Vector128 . Create ( Pi_Tail1 ) ) - ( dn * Vector128 . Create ( Pi_Tail2 ) ) ;
239
+
240
+ // f = |x| - (dn * π)
241
+ Vector128 < double > f = uxMasked ;
242
+ f = MultiplyAddEstimateOperator < double > . Invoke ( dn , Vector128 . Create ( - double . Pi ) , f ) ;
243
+ f = MultiplyAddEstimateOperator < double > . Invoke ( dn , Vector128 . Create ( - Pi_Tail1 ) , f ) ;
244
+ f = MultiplyAddEstimateOperator < double > . Invoke ( dn , Vector128 . Create ( - Pi_Tail2 ) , f ) ;
239
245
240
246
// POLY_EVAL_ODD_17
241
247
Vector128 < double > f2 = f * f ;
@@ -262,11 +268,17 @@ public static Vector256<double> Invoke(Vector256<double> x)
262
268
return ApplyScalar < SinOperatorDouble > ( x ) ;
263
269
}
264
270
271
+ // dn = |x| * (1 / π)
265
272
Vector256 < double > almHuge = Vector256 . Create ( AlmHuge ) ;
266
273
Vector256 < double > dn = MultiplyAddEstimateOperator < double > . Invoke ( uxMasked , Vector256 . Create ( 1 / double . Pi ) , almHuge ) ;
267
274
Vector256 < ulong > odd = dn . AsUInt64 ( ) << 63 ;
268
275
dn -= almHuge ;
269
- Vector256 < double > f = uxMasked - ( dn * Vector256 . Create ( double . Pi ) ) - ( dn * Vector256 . Create ( Pi_Tail1 ) ) - ( dn * Vector256 . Create ( Pi_Tail2 ) ) ;
276
+
277
+ // f = |x| - (dn * π)
278
+ Vector256 < double > f = uxMasked ;
279
+ f = MultiplyAddEstimateOperator < double > . Invoke ( dn , Vector256 . Create ( - double . Pi ) , f ) ;
280
+ f = MultiplyAddEstimateOperator < double > . Invoke ( dn , Vector256 . Create ( - Pi_Tail1 ) , f ) ;
281
+ f = MultiplyAddEstimateOperator < double > . Invoke ( dn , Vector256 . Create ( - Pi_Tail2 ) , f ) ;
270
282
271
283
// POLY_EVAL_ODD_17
272
284
Vector256 < double > f2 = f * f ;
@@ -293,11 +305,17 @@ public static Vector512<double> Invoke(Vector512<double> x)
293
305
return ApplyScalar < SinOperatorDouble > ( x ) ;
294
306
}
295
307
308
+ // dn = |x| * (1 / π)
296
309
Vector512 < double > almHuge = Vector512 . Create ( AlmHuge ) ;
297
310
Vector512 < double > dn = MultiplyAddEstimateOperator < double > . Invoke ( uxMasked , Vector512 . Create ( 1 / double . Pi ) , almHuge ) ;
298
311
Vector512 < ulong > odd = dn . AsUInt64 ( ) << 63 ;
299
312
dn -= almHuge ;
300
- Vector512 < double > f = uxMasked - ( dn * Vector512 . Create ( double . Pi ) ) - ( dn * Vector512 . Create ( Pi_Tail1 ) ) - ( dn * Vector512 . Create ( Pi_Tail2 ) ) ;
313
+
314
+ // f = |x| - (dn * π)
315
+ Vector512 < double > f = uxMasked ;
316
+ f = MultiplyAddEstimateOperator < double > . Invoke ( dn , Vector512 . Create ( - double . Pi ) , f ) ;
317
+ f = MultiplyAddEstimateOperator < double > . Invoke ( dn , Vector512 . Create ( - Pi_Tail1 ) , f ) ;
318
+ f = MultiplyAddEstimateOperator < double > . Invoke ( dn , Vector512 . Create ( - Pi_Tail2 ) , f ) ;
301
319
302
320
// POLY_EVAL_ODD_17
303
321
Vector512 < double > f2 = f * f ;
0 commit comments