Skip to content

fix: JS_NewFloat64 -O3 not support Infinity NaN#401

Merged
saghul merged 5 commits intosaghul:masterfrom
zeromake:master
Sep 29, 2023
Merged

fix: JS_NewFloat64 -O3 not support Infinity NaN#401
saghul merged 5 commits intosaghul:masterfrom
zeromake:master

Conversation

@zeromake
Copy link
Copy Markdown
Contributor

@zeromake zeromake commented Sep 28, 2023

close #399

@saghul
Copy link
Copy Markdown
Owner

saghul commented Sep 28, 2023

Please don't change the CMake version, it's not related to your change AFAICT.

@zeromake
Copy link
Copy Markdown
Contributor Author

@saghul CMake version change is reset

@zeromake
Copy link
Copy Markdown
Contributor Author

@saghul Incidentally cmake latest version is 3.27, in deps/quickjs/CMakeLists.txt cmake_minimum_required(VERSION 3.4) what's going on

@zeromake
Copy link
Copy Markdown
Contributor Author

@saghul
https://github.com/saghul/txiki.js/actions/runs/6333568907/job/17204665047

// (25).toExponential(0) on mingw is 2e+1
assert.eq((25).toExponential(0), "3e+1");

I'll find a Windows system debugging later

@zeromake
Copy link
Copy Markdown
Contributor Author

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+01

on 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

@saghul
Copy link
Copy Markdown
Owner

saghul commented Sep 29, 2023

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.

@zeromake
Copy link
Copy Markdown
Contributor Author

zeromake commented Sep 29, 2023

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

@saghul saghul merged commit ea59335 into saghul:master Sep 29, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

osx clang use -O3 parseFloat('Infinity') == 3

2 participants