You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Complex(1e-16, 1e-8).toString() is "1e-8i" (I expected "1e-16 + 1e-8i")
Complex(1e-16, 1e-16).toString() is "0" (I expected "1e-16 + 1e-16i")
It looks like this behavior is intentional: if real or imaginary part is less than
Complex.EPSILON (1e-15), toString() "helpfully" ignores it.
Is this really a good idea?
In my perception, it makes toString() into a dull and less-useful instrument. For example, I wanted to add the following test cases to complex.test.js, to confirm that expm1() works properly on small inputs; it turns out that it does, but that can't be easily confirmed with these test cases, due to toString's "helpful" zeroing behavior:
{
set: "1e-9i",
fn: "expm1",
expect: "-5e-19 + 1e-9i", // fails: comes out "1e-9i" instead
},
{
set: "1e-20i",
fn: "expm1",
expect: "-5e-41 + 1e-20i", // fails: comes out "0" instead
},
{
set: "1e-20",
fn: "expm1",
expect: "1e-20", // fails: comes out "0" instead
},
On a related note (which could be made into a separate Issue if there is interest), I'm not a fan of equals() using fuzzy equality either; I find its behavior to be unmemorable and essentially never useful to me, and, conversely, there doesn't seem to be an exact equality operator, which I would find useful. It may be too late to change equals() for reasons or backwards compatibility, but perhaps an exactEquals() could be added, at least?
The text was updated successfully, but these errors were encountered:
Yes, this is a tradeoff we had to made. In most cases you have some process inaccuracies you don't want to be printed out. In cases where you really need to print out those small numbers, it is probably better to copy the toString() over in your code and overwrite the original function with
I notice that, e.g.
It looks like this behavior is intentional: if real or imaginary part is less than
Complex.EPSILON (1e-15), toString() "helpfully" ignores it.
Is this really a good idea?
In my perception, it makes toString() into a dull and less-useful instrument. For example, I wanted to add the following test cases to complex.test.js, to confirm that expm1() works properly on small inputs; it turns out that it does, but that can't be easily confirmed with these test cases, due to toString's "helpful" zeroing behavior:
On a related note (which could be made into a separate Issue if there is interest), I'm not a fan of equals() using fuzzy equality either; I find its behavior to be unmemorable and essentially never useful to me, and, conversely, there doesn't seem to be an exact equality operator, which I would find useful. It may be too late to change equals() for reasons or backwards compatibility, but perhaps an exactEquals() could be added, at least?
The text was updated successfully, but these errors were encountered: