Edit report at https://bugs.php.net/bug.php?id=79595&edit=1
ID: 79595
User updated by: v-yitam at microsoft dot com
Reported by: v-yitam at microsoft dot com
Summary: zend_init_fpu() alters FPU precision
Status: Open
Type: Bug
Package: Math related
Operating System: Alpine Linux
PHP Version: 7.4.5
Block user comment: N
Private report: N
New Comment:
My pleasure! Will get back to you later.
Previous Comments:
------------------------------------------------------------------------
[2020-05-20 15:50:03] cmb@php.net
A possible fix might be <https://github.com/php/php-src/pull/5602>.
Could you please try that, @yitam?
------------------------------------------------------------------------
[2020-05-20 15:20:01] v-yitam at microsoft dot com
This floating point calculation issue happens in Alpine Linux only, so we are targeting 64-bit
builds for Linux only. Thanks for considering!
------------------------------------------------------------------------
[2020-05-20 11:09:56] nikic@php.net
Are you interested in this for 32-bit or 64-bit builds?
I think we can safely disable this code if compiling under __SSE__, because we know that PHP itself
will not use x87 FPU in that case.
For 32-bit builds targeting x87 FPU, I don't think we want to change this, as we do want normal
floating point operations to be based on double precision.
------------------------------------------------------------------------
[2020-05-19 17:20:16] v-yitam at microsoft dot com
Thanks for getting back to us. Indeed, I suspect so:
/* NOTE: This only sets internal precision. MSVC does NOT support double-
extended precision! */
# define XPFPA_SWITCH_DOUBLE_EXTENDED()
If I changed the macro XPFPA_SWITCH_DOUBLE() to XPFPA_SWITCH_DOUBLE_EXTENDED(), the problem was
resolved in Alpine Linux.
Hence, please investigate further why using XPFPA_SWITCH_DOUBLE() is necessary. On Linux the FPU
should be left at 80-bit precision, especially Alpine, as musl libc's strtod() requires it to
work properly, not to mention it also breaks any functions that expect the standard ABI on Linux.
------------------------------------------------------------------------
[2020-05-18 07:26:35] cmb@php.net
From a comment in zend_float.h:
| This header file defines several platform-dependent macros that
| ensure equal and deterministic floating point behaviour across
| several platforms, compilers and architectures.
So, apparently, this is done deliberately. I'm not sure that this
is a good idea, though.
------------------------------------------------------------------------
The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
https://bugs.php.net/bug.php?id=79595
--
Edit this bug report at https://bugs.php.net/bug.php?id=79595&edit=1