Flow.Launcher
Flow.Launcher copied to clipboard
BUG: Calculator can't multiply numbers with more than 19 digits
Checks
-
[X] I have checked that this issue has not already been reported.
-
[X] I am using the latest version of Flow Launcher.
Problem Description
Calculator is providing wrong result if one of the two numbers being multiplied is more than 19 digits. Examples:
- 1.2*0.83333333333333333333
- 2453*23534245034253633353
- 1*0.22222222222222222222
- 1*24353532424240053022
- 1*1111111111111111111111
- 1324*30000000000000000000
It's easiest to see this issue in action if you copy and paste the above examples and then remove just the last digit. We will notice a large change in the result.
But there are some instances where this doesn't happen. I am unable to determine the logic behind when this issue occurs and when it does not. Examples:
- 1*0.11111111111111111111
- 1324*10000000000000000000
- 1324*40000000000000000000
To Reproduce
No response
Screenshots
No response
Flow Launcher Version
1.18.0
Windows Build Number
10.0.22631.3447
Error Log
No response
Update: This issue occurs even when directly typing the >19 digit number. Try typing "30000000000000000000" vs "40000000000000000000".
Just a user of Flow Launcher: Sure it is a bug but why would you do such calculations. 30000000000000000000*40000000000000000000
Just a user of Flow Launcher: Sure it is a bug but why would you do such calculations. 30000000000000000000*40000000000000000000
That was just one example. And this unlikely calculation might be an indication of a larger issue (possibly affecting even calculations that are more common, including one I shared above).
Hopefully that clarifies it, but also to answer to your question, I do tend to perform these calculations for various reasons, so I would also welcome support for scientific calculations to Flow Launcher. But that's to be raised in a different place.
I'm not a core dev but my guess this is because the calc app is using 32 bit integer types which simply can't store large numbers. So either a larger bit integer data type is used or some sort of warning or error trap to let the user know.
In fact fumbling through the code here on Github, it could be the Math.Round function which seems to cast integers to 32 bit.
@deefrawley Just a user of Flow Launcher: I think Flow Launcher calculator is using 64 bit int and as per google 64 bit int can store numbers from -9,223,372,036,854,775,807 to 9,223,372,036,854,775,807. So any number greater than 9,223,372,036,854,775,807 and smaller than -9,223,372,036,854,775,807 can cause the issue.