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" />
<PackageVersion Include="NextAfter.Net" Version="1.0.4" />
<PackageReference Include="NextAfter.Net" />
paket add NextAfter.Net --version 1.0.4
#r "nuget: NextAfter.Net, 1.0.4"
#:package NextAfter.Net@1.0.4
#addin nuget:?package=NextAfter.Net&version=1.0.4
#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,
NaNwill not change - with any rounding direction
+Infand-Infwill not change - when receiving the following representable numbers
after
double.MaxValueandfloat.MaxValuewill be returned+Inf - when getting previous representable numbers
before
double.MinValueandfloat.MinValuewill be returned-Inf - when receiving the following representable numbers
after
0it will returnfloat.Epsilonanddouble.Epsilonrespectively - when getting previous representable numbers
before
0will return-float.Epsilonand-double.Epsilonrespectively - 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. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.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.