Skip to content

UtkanS/adaptive-number

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 

Repository files navigation

AdaptiveNumber

A small C# utility type that stores integers in long until it would overflow, then automatically upgrades to BigInteger. Includes precise division helpers with configurable rounding and a Normalize helper to turn big ratios into [0..1] floats safely.

Why this exists: you sometimes want integers for exactness, but still need to cross long limits without throwing. AdaptiveNumber avoids surprises: small values stay fast, huge values stay correct.

Highlights

  • Auto-switch between long and BigInteger
  • Safe add/subtract/multiply/divide operators
  • Rounding modes for integer division:
    • Truncate
    • HalfAwayFromZero
    • HalfToEven (banker’s rounding)
  • Normalize(current, max)float in [0..1] with careful rounding
  • TryParse/Parse, comparisons, equality, TryAsLong
  • Optional: .NET 7 generic math support (via AdaptiveNumber.net7.cs)

Quick usage

using System; using System.Numerics; using Utkan; // namespace in the file class Demo { static void Main() { AdaptiveNumber a = long.MaxValue; AdaptiveNumber b = 10; // Multiplication promotes to BigInteger automatically (no overflow) AdaptiveNumber huge = a * b; Console.WriteLine(huge); // prints a big value // Integer division with rounding modes var d1 = AdaptiveNumber.Divide(5, 2, PercentRounding.Truncate); // 2 var d2 = AdaptiveNumber.Divide(5, 2, PercentRounding.HalfAwayFromZero); // 3 var d3 = AdaptiveNumber.Divide(5, 2, PercentRounding.HalfToEven); // 2 (banker’s to nearest even) // Percent helper: (value * percent) / 100 with rounding var tip = AdaptiveNumber.PercentageOf(150, 12, PercentRounding.HalfToEven); // 18 // Normalize to [0..1] with good precision for floats float hp = AdaptiveNumber.Normalize(4500, 10000); // 0.45f // Optional: Try reading back as long if (huge.TryAsLong(out long smallValue)) Console.WriteLine(smallValue); else Console.WriteLine("Does not fit in long"); } }

About

A C# integer type that auto-switches between long and BigInteger with safe rounding

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages