@@ -1189,39 +1189,34 @@ struct _CosCardinalEvaluationScheme{
1189
1189
end
1190
1190
1191
1191
function (sch:: _CosCardinalEvaluationScheme )(x:: AbstractFloat )
1192
+ function choose_poly (a:: AbstractFloat , polynomials_close_to_origin:: NTuple{2} )
1193
+ ((b1, p0), (_, p1)) = polynomials_close_to_origin
1194
+ if a ≤ b1
1195
+ p0
1196
+ else
1197
+ p1
1198
+ end
1199
+ end
1200
+ function choose_poly (a:: AbstractFloat , polynomials_close_to_origin:: NTuple{4} )
1201
+ ((b1, p0), (b2, p1), (b3, p2), (_, p3)) = polynomials_close_to_origin
1202
+ if a ≤ b2 # hardcoded binary search
1203
+ if a ≤ b1
1204
+ p0
1205
+ else
1206
+ p1
1207
+ end
1208
+ else
1209
+ if a ≤ b3
1210
+ p2
1211
+ else
1212
+ p3
1213
+ end
1214
+ end
1215
+ end
1192
1216
a = abs (x)
1193
1217
polynomials_close_to_origin = sch. polynomials_close_to_origin
1194
1218
if (polynomials_close_to_origin != = ()) && (a ≤ polynomials_close_to_origin[end ][1 ])
1195
- let
1196
- if length (polynomials_close_to_origin) == 1 # hardcode for each allowed tuple size
1197
- p = only (polynomials_close_to_origin)[2 ]
1198
- elseif length (polynomials_close_to_origin) == 2
1199
- p = let ((b1, p0), (_, p1)) = polynomials_close_to_origin
1200
- if a ≤ b1 # hardcoded binary search
1201
- p0
1202
- else
1203
- p1
1204
- end
1205
- end
1206
- elseif length (polynomials_close_to_origin) == 4
1207
- p = let ((b1, p0), (b2, p1), (b3, p2), (_, p3)) = polynomials_close_to_origin
1208
- if a ≤ b2 # hardcoded binary search
1209
- if a ≤ b1
1210
- p0
1211
- else
1212
- p1
1213
- end
1214
- else
1215
- if a ≤ b3
1216
- p2
1217
- else
1218
- p3
1219
- end
1220
- end
1221
- end
1222
- end
1223
- x * evalpoly (x * x, p)
1224
- end
1219
+ x * evalpoly (x * x, choose_poly (a, polynomials_close_to_origin))
1225
1220
elseif isinf (x)
1226
1221
typeof (x)(0 )
1227
1222
else
0 commit comments