rfc:integer-rounding
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revisionNext revisionBoth sides next revision | ||
rfc:integer-rounding [2024/03/09 06:54] – wording mabe | rfc:integer-rounding [2024/03/17 13:38] – In voting phase mabe | ||
---|---|---|---|
Line 3: | Line 3: | ||
* Date: 2023-09-26 | * Date: 2023-09-26 | ||
* Author: Marc Bennewitz, php@mabe.berlin | * Author: Marc Bennewitz, php@mabe.berlin | ||
- | * Status: | + | * Status: |
* First Published at: https:// | * First Published at: https:// | ||
Line 13: | Line 13: | ||
Except '' | Except '' | ||
- | As a result of '' | + | As a result of '' |
In most cases this is sufficient but in cases of handling integer values above 2^53 you start to end up with unexpected results due to floating point arithmetic and precision loss. | In most cases this is sufficient but in cases of handling integer values above 2^53 you start to end up with unexpected results due to floating point arithmetic and precision loss. | ||
Line 22: | Line 22: | ||
===== Proposal ===== | ===== Proposal ===== | ||
- | This RFC proposes to perform rounding on given int and return | + | This RFC proposes to perform rounding on given int and return |
In case of integer under-/ | In case of integer under-/ | ||
For '' | For '' | ||
+ | ---- | ||
+ | Rounding a given float will perform rounding on floating point number directly and return float as it's done currently. | ||
+ | There will be no implicit cast to int because floats (double) can represent a much wider range of numbers than int (32 or 64 bit). | ||
+ | Floating point numbers on the other hand gets imprecise on representing numbers > 2^53 but passing a float to be rounded such imprecision must be known in first place already. | ||
+ | ---- | ||
An additional argument will be introduced '' | An additional argument will be introduced '' | ||
In PHP 8.next this will default to '' | In PHP 8.next this will default to '' | ||
- | In PHP 9.0 the default will change to '' | + | In PHP 9.0 the default will change to '' |
Line 68: | Line 73: | ||
var_dump(round(987654321098765432, | var_dump(round(987654321098765432, | ||
var_dump(round(987654321098765432, | var_dump(round(987654321098765432, | ||
+ | var_dump(round(10000000000000055296)); | ||
var_dump(takeFloat(round(987654321098765432, | var_dump(takeFloat(round(987654321098765432, | ||
var_dump(returnFloat(round(987654321098765432, | var_dump(returnFloat(round(987654321098765432, | ||
Line 77: | Line 83: | ||
var_dump(round(987654321098765432, | var_dump(round(987654321098765432, | ||
var_dump(round(987654321098765432, | var_dump(round(987654321098765432, | ||
+ | var_dump(round(10000000000000055296, | ||
var_dump(takeFloat(round(987654321098765432, | var_dump(takeFloat(round(987654321098765432, | ||
var_dump(returnFloat(round(987654321098765432, | var_dump(returnFloat(round(987654321098765432, | ||
Line 86: | Line 93: | ||
var_dump(round(987654321098765432, | var_dump(round(987654321098765432, | ||
var_dump(round(987654321098765432, | var_dump(round(987654321098765432, | ||
+ | var_dump(round(10000000000000055296, | ||
var_dump(takeFloat(round(987654321098765432, | var_dump(takeFloat(round(987654321098765432, | ||
var_dump(returnFloat(round(987654321098765432, | var_dump(returnFloat(round(987654321098765432, | ||
Line 96: | Line 104: | ||
float(9.87654321098766E+17) | float(9.87654321098766E+17) | ||
float(9.8765432109877E+17) | float(9.8765432109877E+17) | ||
+ | float(1.0000000000000055E+19) | ||
float(9.87654321098766E+17) | float(9.87654321098766E+17) | ||
float(9.87654321098766E+17) | float(9.87654321098766E+17) | ||
Line 108: | Line 117: | ||
float(9.87654321098766E+17) | float(9.87654321098766E+17) | ||
float(9.8765432109877E+17) | float(9.8765432109877E+17) | ||
+ | float(1.0000000000000055E+19) | ||
float(9.87654321098766E+17) | float(9.87654321098766E+17) | ||
float(9.87654321098766E+17) | float(9.87654321098766E+17) | ||
Line 115: | Line 125: | ||
float(9.87654321098766E+17) | float(9.87654321098766E+17) | ||
float(9.8765432109877E+17) | float(9.8765432109877E+17) | ||
+ | float(1.0000000000000055E+19) | ||
float(9.87654321098766E+17) | float(9.87654321098766E+17) | ||
float(9.87654321098766E+17) | float(9.87654321098766E+17) | ||
Line 122: | Line 133: | ||
int(987654321098765000) | int(987654321098765000) | ||
float(9.8765432109877E+17) | float(9.8765432109877E+17) | ||
+ | float(1.0000000000000055E+19) | ||
float(9.87654321098766E+17) | float(9.87654321098766E+17) | ||
float(9.87654321098766E+17) | float(9.87654321098766E+17) | ||
Line 132: | Line 144: | ||
int(987654321098765000) | int(987654321098765000) | ||
float(9.8765432109877E+17) | float(9.8765432109877E+17) | ||
+ | float(1.0000000000000055E+19) | ||
float(9.87654321098766E+17) | float(9.87654321098766E+17) | ||
float(9.87654321098766E+17) | float(9.87654321098766E+17) | ||
Line 139: | Line 152: | ||
float(9.87654321098766E+17) | float(9.87654321098766E+17) | ||
float(9.8765432109877E+17) | float(9.8765432109877E+17) | ||
+ | float(1.0000000000000055E+19) | ||
float(9.87654321098766E+17) | float(9.87654321098766E+17) | ||
float(9.87654321098766E+17) | float(9.87654321098766E+17) | ||
Line 146: | Line 160: | ||
int(987654321098765000) | int(987654321098765000) | ||
float(9.8765432109877E+17) | float(9.8765432109877E+17) | ||
+ | float(1.0000000000000055E+19) | ||
float(9.87654321098766E+17) | float(9.87654321098766E+17) | ||
float(9.87654321098766E+17) | float(9.87654321098766E+17) | ||
Line 187: | Line 202: | ||
- | ===== Proposed Voting Choices ===== | + | ===== Proposed Voting Choices ===== |
- | One primary | + | As per the voting RFC a yes/ |
+ | Voting started | ||
+ | <doodle title=" | ||
+ | * Yes | ||
+ | * No | ||
+ | </ | ||
===== Patches and Tests ===== | ===== Patches and Tests ===== |
rfc/integer-rounding.txt · Last modified: 2024/04/02 07:07 by mabe