9 Nov
2017
9 Nov
'17
1:41 p.m.
2017-11-09 6:33 GMT-07:00 Henri Verbeet <hverbeet(a)gmail.com>:
On 9 November 2017 at 16:45, Alex Henrie <alexhenrie24(a)gmail.com> wrote:
- *pangle = 2.0f * acosf(pq->w); + *pangle = 2.0f * acos(pq->w); /* acosf has too much rounding error */ Does that rounding error by any chance get better if you replace "acosf(x)" with "atan2f(sqrtf((1.0f - x) * (1.0f + x)), x)"?
That actually makes the rounding error worse on my machine: printf("acos: %.9f\n", 2*acos(10.0f/22.0f)); printf("acosf: %.9f\n", 2*acosf(10.0f/22.0f)); printf("atan: %.9f\n", 2*atan2f(sqrtf((1.0f - 10.0f/22.0f) * (1.0f + 10.0f/22.0f)), 10.0f/22.0f)); acos: 2.197868979 acosf: 2.197869062 atan: 2.197868824 -Alex