@@ -10,14 +10,15 @@ public static class Arithmetic
1010 public const sbyte SIGN_BIT_8 = - 128 ;
1111
1212 // Ceiling function that doesn't deal with floating point values
13- public static ulong CeilingExact ( ulong u1 , ulong u2 ) => ( u1 / u2 ) + ( u1 % u2 == 0 ? 0UL : 1UL ) ;
14- public static long CeilingExact ( long u1 , long u2 ) => ( u1 / u2 ) + ( u1 % u2 == 0 ? 0L : 1L | ( ( ( u1 & SIGN_BIT_64 ) ^ ( u2 & SIGN_BIT_64 ) ) >> 62 ) ) ;
15- public static uint CeilingExact ( uint u1 , uint u2 ) => ( u1 / u2 ) + ( u1 % u2 == 0 ? 0U : 1U ) ;
16- public static int CeilingExact ( int u1 , int u2 ) => ( u1 / u2 ) + ( u1 % u2 == 0 ? 0 : 1 | ( ( ( u1 & SIGN_BIT_32 ) ^ ( u2 & SIGN_BIT_32 ) ) >> 30 ) ) ;
17- public static ushort CeilingExact ( ushort u1 , ushort u2 ) => ( ushort ) ( ( u1 / u2 ) + ( u1 % u2 == 0 ? 0 : 1 ) ) ;
18- public static short CeilingExact ( short u1 , short u2 ) => ( short ) ( ( u1 / u2 ) + ( u1 % u2 == 0 ? 0 : 1 | ( ( ( u1 & SIGN_BIT_32 ) ^ ( u2 & SIGN_BIT_32 ) ) >> 30 ) ) ) ;
19- public static byte CeilingExact ( byte u1 , byte u2 ) => ( byte ) ( ( u1 / u2 ) + ( u1 % u2 == 0 ? 0 : 1 ) ) ;
20- public static sbyte CeilingExact ( sbyte u1 , sbyte u2 ) => ( sbyte ) ( ( u1 / u2 ) + ( u1 % u2 == 0 ? 0 : 1 | ( ( ( u1 & SIGN_BIT_32 ) ^ ( u2 & SIGN_BIT_32 ) ) >> 30 ) ) ) ;
13+ // these only work correctly with possitive numbers
14+ public static ulong CeilingExact ( ulong u1 , ulong u2 ) => ( u1 + u2 - 1 ) / u2 ;
15+ public static long CeilingExact ( long u1 , long u2 ) => ( u1 + u2 - 1 ) / u2 ;
16+ public static uint CeilingExact ( uint u1 , uint u2 ) => ( u1 + u2 - 1 ) / u2 ;
17+ public static int CeilingExact ( int u1 , int u2 ) => ( u1 + u2 - 1 ) / u2 ;
18+ public static ushort CeilingExact ( ushort u1 , ushort u2 ) => ( ushort ) ( ( u1 + u2 - 1 ) / u2 ) ;
19+ public static short CeilingExact ( short u1 , short u2 ) => ( short ) ( ( u1 + u2 - 1 ) / u2 ) ;
20+ public static byte CeilingExact ( byte u1 , byte u2 ) => ( byte ) ( ( u1 + u2 - 1 ) / u2 ) ;
21+ public static sbyte CeilingExact ( sbyte u1 , sbyte u2 ) => ( sbyte ) ( ( u1 + u2 - 1 ) / u2 ) ;
2122
2223 /// <summary>
2324 /// ZigZag encodes a signed integer and maps it to a unsigned integer
0 commit comments