From 49ac1909f8b32e9da5405c161d5151bbf814a44b Mon Sep 17 00:00:00 2001 From: Iliya Katueshenock Date: Sat, 25 May 2024 17:51:20 +0300 Subject: [PATCH] init --- .../bug_reports/floating_point_error.md | 45 +++++++++++++++++++ .../handbook/bug_reports/triaging_playbook.md | 30 +++++++++++++ 2 files changed, 75 insertions(+) create mode 100644 docs/handbook/bug_reports/floating_point_error.md diff --git a/docs/handbook/bug_reports/floating_point_error.md b/docs/handbook/bug_reports/floating_point_error.md new file mode 100644 index 00000000..04f3e463 --- /dev/null +++ b/docs/handbook/bug_reports/floating_point_error.md @@ -0,0 +1,45 @@ +# Floating point error + +## Explanation + +Every time user are operated by non integer values in blender is floating +point values of 32 bit. Here is some notes about such values: + +1. Order of operations and its type is matter. `A + A + A` is not `A * 3`. +2. All floating points values are decimal representation of binary real number + and binary exponent value. +3. Just like you can not write `10 / 3` in limited decimal number (`3.333...`), + you can not represent `1.1` as floating point value without very small but + still existed fractional part: `1.10000002384185791015625`. +4. Just to do not mess UI by all this, usually not really matter, details, + Blender draw floating point values with fixed number of digits after dot. +3. Comparison for equality is something that users should not do at all. If + this values are not typed by user, but result of calculations, comparison + going to be fail in a lot of cases. Sometimes blender can provide epsilon + setting to avoid this error. +4. Fix of floating point error are not trivial. For example, does this should + requers infint number of digits for `3.333...`? Or mathematical expressions + should be stored as value and comparison should be kind of subtraction of + such expressions and next simplification by mathematical rules be performed? +5. Using of dooble will increase execution time, memory usage. Replace of all + floating point numbers in blender will be far expensive refactor. + +## For bug triaging + +Bugs, that related with floating point precision are well defined and can be reported as: + +- Graphical artifacts in shader. +- Incorrect result of conditions. +- Shaking of objects on large coordinates. +- Additional fractional part in result of symmetrical operations. +- Logarithmic notation of value in field (`3e-10`). + +But even so, this is not a bug. Most often the error is caused by the user or +can be corrected by changing the math. + +## References + +Some links to check: + +- More detailed learn about float: . +- Online view of floating point value representation: . diff --git a/docs/handbook/bug_reports/triaging_playbook.md b/docs/handbook/bug_reports/triaging_playbook.md index 94853355..7c821b7b 100644 --- a/docs/handbook/bug_reports/triaging_playbook.md +++ b/docs/handbook/bug_reports/triaging_playbook.md @@ -69,6 +69,7 @@ template for them. - Complete report, but performance - Complete report, but corrupted mesh - Complete report, but dependency cycle +- Complete report, but floating point precision - Unsupported graphics card or driver - Blender doesn't run / crashes @@ -422,6 +423,35 @@ latest Blender: > but these cases are mostly known and the solution for them requires bigger > design considerations which is outside of the scope of the bug tracker. +### Complete report, but floating point precision + +**Example:** [\#121793](https://projects.blender.org/blender/blender/issues/121793), +[\#122181](https://projects.blender.org/blender/blender/issues/122181), +[\#122046](https://projects.blender.org/blender/blender/issues/122046) + +**Action:** + +- Close the report. +- Change the `Status >` label to `Status > **Archived**` (a bot + should do this automatically - but only visible after a manual refresh + of the page). + +> NOTE: **Message Example** +> Thanks for report. Core of the issue described here is the floating point +> precision issue. Some description of such issues: +> +> 1. Math in computer is not the same math that you might learn in the school. +> There is the set of some limitations and specifics that cause different result +> in compare with your expectation. +> 2. Range of enough good value precision is around 5 digits around dot. +> 3. UI draw only very small range of digits in fractional part just for +> compactness. If you want to see real representation of the value, you need +> to use python. +> 4. Floating point value is how computers handle real number today, and +> there is no way to fix issues related with that in general mean. +> +> See for more details. + ### Unsupported graphics card or driver **Action:** -- 2.30.2