From 94455e43e18e7ebc1855d1bc76e56c968da93a10 Mon Sep 17 00:00:00 2001 From: bde Date: Sun, 11 Dec 2005 17:58:14 +0000 Subject: [PATCH] Fixed the unexpectedly large maximum error after the previous commit. It was because I forgot to translate the part of the double precision algorithm that chops t so that t*t is exact. Now the maximum error is the same as for double precision (almost exactly 2.0/3 ulps). --- lib/msun/src/s_cbrtf.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/msun/src/s_cbrtf.c b/lib/msun/src/s_cbrtf.c index 882ed0a73102..1453ac247eaa 100644 --- a/lib/msun/src/s_cbrtf.c +++ b/lib/msun/src/s_cbrtf.c @@ -67,9 +67,9 @@ cbrtf(float x) /* chop t to 12 bits and make it larger than cbrt(x) */ GET_FLOAT_WORD(high,t); - SET_FLOAT_WORD(t,high+0x00001000); + SET_FLOAT_WORD(t,(high&0xfffff000)+0x00001000); - /* one step Newton iteration to 24 bits with error less than 0.984 ulps */ + /* one step Newton iteration to 24 bits with error less than 0.667 ulps */ s=t*t; /* t*t is exact */ r=x/s; w=t+t;