@@ -10,14 +10,15 @@ public static class Arithmetic
10
10
public const sbyte SIGN_BIT_8 = - 128 ;
11
11
12
12
// 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 ) ;
21
22
22
23
/// <summary>
23
24
/// ZigZag encodes a signed integer and maps it to a unsigned integer
0 commit comments