NextAfter.Net
1.0.4
dotnet add package NextAfter.Net --version 1.0.4
NuGet\Install-Package NextAfter.Net -Version 1.0.4
<PackageReference Include="NextAfter.Net" Version="1.0.4" />
paket add NextAfter.Net --version 1.0.4
#r "nuget: NextAfter.Net, 1.0.4"
// Install NextAfter.Net as a Cake Addin #addin nuget:?package=NextAfter.Net&version=1.0.4 // Install NextAfter.Net as a Cake Tool #tool nuget:?package=NextAfter.Net&version=1.0.4
NextAfter.Net
Calculations are often written in C++, the rounding of which must be controlled. The method _controlfp
is usually used for this (https://learn.microsoft.com/en-us/cpp/c-runtime-library/reference/control87-controlfp-control87-2?view=msvc-170).
However, due to cross-platform, such a solution in C#
is not available. You can work around this limitation by doing a calculation that, according to the IEEE-754
standard, will round to the nearest neighbor, and then manually rounding the result up or down as needed.
In C++ there is a group of methods called std:nextafter
and std:nexttoward
(https://en.cppreference.com/w/cpp/numeric/math/nextafter).
There is no such thing in .Net Framework. So I decided to write a utility that will allow you to do this. I use this utility in my scientific work because I study interval analysis and I need to use outward rounding in calculations.
The utility guarantees the following behavior:
- with any rounding direction,
NaN
will not change - with any rounding direction
+Inf
and-Inf
will not change - when receiving the following representable numbers
after
double.MaxValue
andfloat.MaxValue
will be returned+Inf
- when getting previous representable numbers
before
double.MinValue
andfloat.MinValue
will be returned-Inf
- when receiving the following representable numbers
after
0
it will returnfloat.Epsilon
anddouble.Epsilon
respectively - when getting previous representable numbers
before
0
will return-float.Epsilon
and-double.Epsilon
respectively - in other cases, when receiving the next number representable in floating-point arithmetic, a number that is strictly greater than the specified one will be returned, when receiving the previous number — strictly less, respectively (it is also guaranteed that between the original number and the result of the utility's calculations there are no other numbers representable in floating point arithmetic)
The behavior described above is guaranteed as described in the utility tests.
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
.NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
.NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
.NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen40 was computed. tizen60 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- No dependencies.
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
Include documentation into package.