diff options
author | Sverker Eriksson <[email protected]> | 2017-02-14 15:53:04 +0100 |
---|---|---|
committer | Sverker Eriksson <[email protected]> | 2017-02-14 16:02:03 +0100 |
commit | d73423cdba178c166f25e00a4608ccc8d0465937 (patch) | |
tree | 78aa57f5dfe7ed6a388d0d28d0c6d9ab335a31f8 /erts/emulator/test | |
parent | 3b7a6ffddc819bf305353a593904cea9e932e7dc (diff) | |
download | otp-d73423cdba178c166f25e00a4608ccc8d0465937.tar.gz otp-d73423cdba178c166f25e00a4608ccc8d0465937.tar.bz2 otp-d73423cdba178c166f25e00a4608ccc8d0465937.zip |
erts: Fix round/1 for large floats
1> round(6209607916799025.0).
6209607916799026
Problem: Adding/subtracting 0.5 and large double floats between
(1 bsl 52) and (1 bsl 53) does not give reliable results.
Solution: Use round() function in math.h.
Diffstat (limited to 'erts/emulator/test')
-rw-r--r-- | erts/emulator/test/guard_SUITE.erl | 1 | ||||
-rw-r--r-- | erts/emulator/test/num_bif_SUITE.erl | 3 |
2 files changed, 4 insertions, 0 deletions
diff --git a/erts/emulator/test/guard_SUITE.erl b/erts/emulator/test/guard_SUITE.erl index e155e5f49f..54ee710363 100644 --- a/erts/emulator/test/guard_SUITE.erl +++ b/erts/emulator/test/guard_SUITE.erl @@ -317,6 +317,7 @@ guard_bifs(Config) when is_list(Config) -> try_gbif('float/1', Big, float(id(Big))), try_gbif('trunc/1', Float, 387924.0), try_gbif('round/1', Float, 387925.0), + try_gbif('round/1', 6209607916799025.0, 6209607916799025), try_gbif('length/1', [], 0), try_gbif('length/1', [a], 1), diff --git a/erts/emulator/test/num_bif_SUITE.erl b/erts/emulator/test/num_bif_SUITE.erl index d1c9648017..bb85738454 100644 --- a/erts/emulator/test/num_bif_SUITE.erl +++ b/erts/emulator/test/num_bif_SUITE.erl @@ -293,6 +293,9 @@ t_round(Config) when is_list(Config) -> 4294967297 = round(id(4294967296.9)), -4294967296 = -round(id(4294967296.1)), -4294967297 = -round(id(4294967296.9)), + + 6209607916799025 = round(id(6209607916799025.0)), + -6209607916799025 = round(id(-6209607916799025.0)), ok. t_trunc(Config) when is_list(Config) -> |