Revision Difference
math.IsNearlyEqual#563329
<cat>libraryfunc</cat>
<function name="IsNearlyEqual" parent="math" type="libraryfunc">
<description>Checks if two floating point numbers are nearly equal.</description>⤶
<description>Checks if two floating point numbers are nearly equal.⤶
⤶
This is useful to mitigate [accuracy issues in floating point numbers](https://en.wikipedia.org/wiki/Floating-point_arithmetic#Accuracy_problems). See examples below.⤶
⤶
See also <page>math.IsNearlyZero</page>⤶
</description>⤶
<realm>Shared and Menu</realm>
<added>2025.01.22</added>
<file line="275-L281">lua/includes/extensions/math.lua</file>
<args>
<arg name="a" type="number">The first number to compare.</arg>
<arg name="b" type="number">The second number to compare.</arg>
<arg name="tolerance" type="number" default="1e-8">The maximum difference between the two numbers to consider them equal.</arg>
</args>
<rets>
<ret name="" type="boolean">True if the difference between the two numbers is less than or equal to the tolerance.</ret>
</rets>
</function>
<example>
<description> Shows the problem known as a [floating-point error](https://en.wikipedia.org/wiki/Floating-point_arithmetic#Accuracy_problems), due to the limited precision of decimal numbers in hardware. </description>
<code>
print( 0.1 + 0.2 == 0.3 ) -- Which is mathematically true.
print( string.format( "%.32f", 0.1 + 0.2 ) ) -- Outputs the result with up to 32 decimal numbers.
</code>
<output>
```
false
0.30000000000000004440892098500626
```
</output>
</example>
<example>
<description> Shows the workaround using `math.IsNearlyEqual()`. </description>
<code>
print( math.IsNearlyEqual( 0.1 + 0.2, 0.3 ) )
print( string.format( "%.32f", 0.1 + 0.2 ) )
</code>
<output>
```
true
0.30000000000000004440892098500626
```
</output>
</example>