kit

kit
git clone https://git.ryansepassi.com/git/kit.git
Log | Files | Refs | README

i128_14_arbitrary_mul.c (674B)


      1 typedef __int128 i128;
      2 typedef unsigned __int128 u128;
      3 
      4 int test_main(void) {
      5   u128 a = ((u128)0x123456789abcdef0ULL << 16) | 0x1357ULL;
      6   u128 b = ((u128)0x0fedcba987654321ULL << 12) | 0x246ULL;
      7   u128 p = a * b;
      8 
      9   if ((unsigned long long)p != 0x71407aa829ff67caULL) return 11;
     10   if ((unsigned long long)(p >> 64) != 0x0ad77d7422601184ULL) return 12;
     11 
     12   i128 x = -(((i128)0x1234567 << 40) + 0x89abcdef);
     13   i128 y = ((i128)0x13579 << 28) + 0x2468ace;
     14   i128 z = x * y;
     15   u128 uz = (u128)z;
     16 
     17   if (z >= 0) return 13;
     18   if ((unsigned long long)uz != 0x324b79b4fd6373aeULL) return 14;
     19   if ((unsigned long long)(uz >> 64) != 0xffffe9fe36571cf3ULL) return 15;
     20 
     21   return 73;
     22 }