fix: JS_NewFloat64 -O3 not support Infinity NaN#401
Conversation
|
Please don't change the CMake version, it's not related to your change AFAICT. |
|
@saghul CMake version change is reset |
|
@saghul Incidentally cmake latest version is |
|
@saghul // (25).toExponential(0) on mingw is 2e+1
assert.eq((25).toExponential(0), "3e+1");I'll find a Windows system debugging later |
|
rounding snprintf on windows llvm-mingw unlike Linux /* fesetround example */
#include <stdio.h> /* printf */
#include <fenv.h> /* fesetround, FE_* */
#include <math.h> /* rint */
int main()
{
float arr[6] = {28, -28, 25, -25, 24, -24};
char buf[128] = {0};
for (int i = 0; i < 6; i++) {
float v = arr[i];
printf("--------------------rounding %f:\n", v);
fesetround(FE_DOWNWARD);
snprintf(buf, 128, "%+.*e", 0, v);
printf("FE_DOWNWARD: %s\n", buf);
fesetround(FE_TONEAREST);
snprintf(buf, 128, "%+.*e", 0, v);
printf("FE_TONEAREST: %s\n", buf);
fesetround(FE_TOWARDZERO);
snprintf(buf, 128, "%+.*e", 0, v);
printf("FE_TOWARDZERO: %s\n", buf);
fesetround(FE_UPWARD);
snprintf(buf, 128, "%+.*e", 0, v);
printf("FE_UPWARD: %s\n\n", buf);
}
return 0;
}on llvm-mingw # -O0
--------------------rounding 28.000000:
FE_DOWNWARD: +3e+01
FE_TONEAREST: +3e+01
FE_TOWARDZERO: +3e+01
FE_UPWARD: +3e+01
--------------------rounding -28.000000:
FE_DOWNWARD: -3e+01
FE_TONEAREST: -3e+01
FE_TOWARDZERO: -3e+01
FE_UPWARD: -3e+01
--------------------rounding 25.000000:
FE_DOWNWARD: +2e+01
FE_TONEAREST: +2e+01
FE_TOWARDZERO: +2e+01
FE_UPWARD: +2e+01
--------------------rounding -25.000000:
FE_DOWNWARD: -2e+01
FE_TONEAREST: -2e+01
FE_TOWARDZERO: -2e+01
FE_UPWARD: -2e+01
--------------------rounding 24.000000:
FE_DOWNWARD: +2e+01
FE_TONEAREST: +2e+01
FE_TOWARDZERO: +2e+01
FE_UPWARD: +2e+01
--------------------rounding -24.000000:
FE_DOWNWARD: -2e+01
FE_TONEAREST: -2e+01
FE_TOWARDZERO: -2e+01
FE_UPWARD: -2e+01
# -O3
--------------------rounding 28.000000:
FE_DOWNWARD: +3e+01
FE_TONEAREST: +3e+01
FE_TOWARDZERO: +3e+01
FE_UPWARD: +3e+01
--------------------rounding -28.000000:
FE_DOWNWARD: -3e+01
FE_TONEAREST: -3e+01
FE_TOWARDZERO: -3e+01
FE_UPWARD: -3e+01
--------------------rounding 25.000000:
FE_DOWNWARD: +2e+01
FE_TONEAREST: +2e+01
FE_TOWARDZERO: +2e+01
FE_UPWARD: +2e+01
--------------------rounding -25.000000:
FE_DOWNWARD: -2e+01
FE_TONEAREST: -2e+01
FE_TOWARDZERO: -2e+01
FE_UPWARD: -2e+01
--------------------rounding 24.000000:
FE_DOWNWARD: +2e+01
FE_TONEAREST: +2e+01
FE_TOWARDZERO: +2e+01
FE_UPWARD: +2e+01
--------------------rounding -24.000000:
FE_DOWNWARD: -2e+01
FE_TONEAREST: -2e+01
FE_TOWARDZERO: -2e+01
FE_UPWARD: -2e+01on linux gcc # -O0
--------------------rounding 28.000000:
FE_DOWNWARD: +2e+01
FE_TONEAREST: +3e+01
FE_TOWARDZERO: +2e+01
FE_UPWARD: +3e+01
--------------------rounding -28.000000:
FE_DOWNWARD: -3e+01
FE_TONEAREST: -3e+01
FE_TOWARDZERO: -2e+01
FE_UPWARD: -2e+01
--------------------rounding 25.000000:
FE_DOWNWARD: +2e+01
FE_TONEAREST: +2e+01
FE_TOWARDZERO: +2e+01
FE_UPWARD: +3e+01
--------------------rounding -25.000000:
FE_DOWNWARD: -3e+01
FE_TONEAREST: -2e+01
FE_TOWARDZERO: -2e+01
FE_UPWARD: -2e+01
--------------------rounding 24.000000:
FE_DOWNWARD: +2e+01
FE_TONEAREST: +2e+01
FE_TOWARDZERO: +2e+01
FE_UPWARD: +3e+01
--------------------rounding -24.000000:
FE_DOWNWARD: -3e+01
FE_TONEAREST: -2e+01
FE_TOWARDZERO: -2e+01
FE_UPWARD: -2e+01
# -O3
--------------------rounding 28.000000:
FE_DOWNWARD: +2e+01
FE_TONEAREST: +3e+01
FE_TOWARDZERO: +2e+01
FE_UPWARD: +3e+01
--------------------rounding -28.000000:
FE_DOWNWARD: -3e+01
FE_TONEAREST: -3e+01
FE_TOWARDZERO: -2e+01
FE_UPWARD: -2e+01
--------------------rounding 25.000000:
FE_DOWNWARD: +2e+01
FE_TONEAREST: +2e+01
FE_TOWARDZERO: +2e+01
FE_UPWARD: +3e+01
--------------------rounding -25.000000:
FE_DOWNWARD: -3e+01
FE_TONEAREST: -2e+01
FE_TOWARDZERO: -2e+01
FE_UPWARD: -2e+01
--------------------rounding 24.000000:
FE_DOWNWARD: +2e+01
FE_TONEAREST: +2e+01
FE_TOWARDZERO: +2e+01
FE_UPWARD: +3e+01
--------------------rounding -24.000000:
FE_DOWNWARD: -3e+01
FE_TONEAREST: -2e+01
FE_TOWARDZERO: -2e+01
FE_UPWARD: -2e+01 |
|
Wow we are going deep here :-) Do you reckon this is a bug in the compiler? Making that particular test dependent on the platform, with a comment and a link to this issue sounds like an acceptable compromise IMHO. |
this pr only for Infinity NaN, del toExponential toFixed test, If you have a plan, let's mention another PR |
close #399