• Michael Mclaughlin's avatar
    Improve toString(radix) for doubles near zero · 348cc6f1
    Michael Mclaughlin authored
    Currently, Number.prototype.toString(radix) often fails to produce the
    least significant bit for doubles near zero. For example, for the
    minimum double, 5e-324, toString(2) produces "0". This means that a
    user cannot reliably get the exact binary or hexdecimal value of a
    double from JavaScript using toString.
    
    This patch makes a slight amendment to the DoubleToRadixCString
    function, so that doubles where the gap to the next double is 5e-324
    (i.e. doubles less than 2**-1021), are represented exactly in binary and
    other power-of-two bases, and close to exactly otherwise. It results
    in Number.prototype.toString producing the correct binary value for all
    doubles.
    
    R=jkummerow@chromium.org, mathias@chromium.org, yangguo@chromium.org
    
    Bug: v8:9294
    Change-Id: I71506149b7c4c0eac8c38675a1ee15fb4f36f9ef
    Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1631601
    Commit-Queue: Mathias Bynens <mathias@chromium.org>
    Reviewed-by: 's avatarJakob Kummerow <jkummerow@chromium.org>
    Reviewed-by: 's avatarMathias Bynens <mathias@chromium.org>
    Cr-Commit-Position: refs/heads/master@{#61925}
    348cc6f1
conversions.cc 44.2 KB