Skip to content

Quantity.Equals(Quantity other, Quantity tolerance) gives false negative due to floating-point arithmetic #1368

Closed as not planned
@AndreasLeeb

Description

@AndreasLeeb

Describe the bug
The current implementation of e.g. Length.Equals(Length other, Length tolerance) can lead to false negatives at the boundaries of the tolerance (for instance when comparing a with a - tolerance).

To Reproduce

var tolerance = Length.FromMillimeters(0.5);
var length = Length.FromMeters(0.1);
Assert.True((length - tolerance).Equals(length, tolerance));

The assert fails, which makes sense if you rephrase it as
Assert.True(((length - tolerance) - length).Abs() <= tolerance);
which also fails as
((length - tolerance) - length).Abs().Millimeters == 0.50000000000000044
due to floating-point arithmetic.

Expected behavior
That the above Assert with Equals returns true.

Additional context
Tried it with UnitsNet 4.132.0, 5.43.0 and on the current master branch (1b3647f).

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions