Lines Matching +full:half +full:- +full:precision
8 | Input: Double-extended number X in location pointed to
11 | Output: The value tan(X) returned in floating-point register Fp0.
15 | result is subsequently rounded to double precision. The
16 | result is provably monotonic in double precision.
24 | 1. If |X| >= 15Pi or |X| < 2**(-40), go to 6.
37 | 4. (k is odd) Tan(X) = -cot(r). Since tan(r) is approximated by a
41 | -Cot(r) = -V/U. Exit.
45 | 7. (|X|<2**(-40)) Tan(X) = X. Exit.
83 |--N*PI/2, -32 <= N <= 32, IN A LEADING TERM IN EXT. AND TRAILING
84 |--TERM IN SGL. NOTE THAT PI IS 64-BIT LONG, THUS N*PI/2 IS AT
85 |--MOST 69 BITS LONG.
165 |--TAN(X) = X FOR DENORMALIZED X
177 cmpil #0x3FD78000,%d0 | ...|X| >= 2**(-40)?
187 |--THIS IS THE USUAL CASE, |X| <= 15 PI.
188 |--THE ARGUMENT REDUCTION IS DONE BY TABLE LOOK UP.
192 |--HIDE THE NEXT TWO INSTRUCTIONS
193 leal PITBL+0x200,%a1 | ...TABLE OF N*PI/2, N = -32,...,32
195 |--FP1 IS NOW READY
201 fsubx (%a1)+,%fp0 | ...X-Y1
202 |--HIDE THE NEXT ONE
204 fsubs (%a1),%fp0 | ...FP0 IS R = (X-Y1)-Y2
247 fdivx %fp1,%fp0 |last inst - possible exception set
283 fmovex %fp1,-(%sp)
287 fdivx (%sp)+,%fp0 |last inst - possible exception set
292 |--IF |X| > 15PI, WE USE THE GENERAL ARGUMENT REDUCTION.
293 |--IF |X| < 2**(-40), RETURN X OR 1.
299 fmovex %fp0,-(%sp)
301 fmovex (%sp)+,%fp0 |last inst - possible exception set
307 |--WHEN REDUCEX IS USED, THE CODE WILL INEVITABLY BE SLOW.
308 |--THIS REDUCTION METHOD, HOWEVER, IS MUCH FASTER THAN USING
309 |--THE REMAINDER INSTRUCTION WHICH IS NOW IN SOFTWARE.
311 fmovemx %fp2-%fp5,-(%a7) | ...save FP2 through FP5
312 movel %d2,-(%a7)
315 |--If compact form of abs(arg) in d0=$7ffeffff, argument is so large that
316 |--there is a danger of unwanted overflow in first LOOP iteration. In this
317 |--case, reduce argument by one remainder step to make subsequent reduction
318 |--safe.
326 movel #0x7fdc0000,FP_SCR3(%a6) |create low half of 2**16383*
340 |--ON ENTRY, FP0 IS X, ON RETURN, FP0 IS X REM PI/2, |X| <= PI/4.
341 |--integer quotient will be stored in N
342 |--Intermediate remainder is 66-bit long; (R,r) in (FP0,FP1)
345 fmovex %fp0,INARG(%a6) | ...+-2**K * F, 1 <= F < 2
353 subil #27,%d0 | ...D0 IS L := K-27
361 |--FIND THE REMAINDER OF (R,r) W.R.T. 2**L * (PI/2). L IS SO CHOSEN
362 |--THAT INT( X * (2/PI) / 2**(L) ) < 2**29.
364 |--CREATE 2**(-L) * (2/PI), SIGN(INARG)*2**(63),
365 |--2**L * (PIby2_1), 2**L * (PIby2_2)
368 subl %d0,%d2 | ...BIASED EXPO OF 2**(-L)*(2/PI)
372 movew %d2,FP_SCR1(%a6) | ...FP_SCR1 is 2**(-L)*(2/PI)
376 |--WE MUST NOW FIND INT(FP2). SINCE WE NEED THIS VALUE IN
377 |--FLOATING POINT FORMAT, THE TWO FMOVE'S FMOVE.L FP <--> N
378 |--WILL BE TOO INEFFICIENT. THE WAY AROUND IT IS THAT
379 |--(SIGN(INARG)*2**63 + FP2) - SIGN(INARG)*2**63 WILL GIVE
380 |--US THE DESIRED VALUE IN FLOATING POINT.
382 |--HIDE SIX CYCLES OF INSTRUCTION
392 |--FP2 IS READY
395 |--HIDE 4 CYCLES OF INSTRUCTION; creating 2**(L)*Piby2_1 and 2**(L)*Piby2_2
401 |--FP2 IS READY
412 |--We are now ready to perform (R+r) - N*P1 - N*P2, P1 = 2**(L) * Piby2_1 and
413 |--P2 = 2**(L) * Piby2_2
419 |--we want P+p = W+w but |p| <= half ulp of P
420 |--Then, we need to compute A := R-P and a := r-p
422 fsubx %fp3,%fp4 | ...W-P
424 fsubx %fp3,%fp0 | ...FP0 is A := R - P
425 faddx %fp5,%fp4 | ...FP4 is p = (W-P)+w
428 fsubx %fp4,%fp1 | ...FP1 is a := r - p
430 |--Now we need to normalize (A,a) to "new (R,r)" where R+r = A+a but
431 |--|r| <= half ulp of R.
433 |--No need to calculate r if this is the last loop
437 |--Need to calculate r
438 fsubx %fp0,%fp3 | ...A-R
439 faddx %fp3,%fp1 | ...FP1 is r := (A-R)+a
445 fmovemx (%a7)+,%fp2-%fp5