- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
How to program function in C++ in Visual Studio 2022
uint128_t divide_uint128_by_uint64(uint128_t dividend, uint64_t divisor, uint64_t* remainder)
without using big number libraries? Note the result can exceed 64-bit i.e. I can't use _udiv128 intrinsic.
Do you know of a link to the Intel sample code?
Link Copied
1 Reply
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
What do you think about this code:
struct uint128_t {
uint64_t hi;
uint64_t lo;
};
uint128_t divide_uint128_by_uint64(uint128_t dividend, uint64_t divisor, uint64_t* remainder) {
if (divisor == 0) {
throw std::runtime_error("Division by zero");
}
uint128_t quotient = { 0, 0 };
// Perform the division manually for uint128_t
uint64_t temp_rem = 0;
for (int i = 127; i >= 0; --i) {
temp_rem = (temp_rem << 1) | ((dividend.hi >> (i - 64)) & 1);
if (temp_rem >= divisor) {
quotient.hi |= (1ULL << (i - 64));
temp_rem -= divisor;
}
}
for (int i = 63; i >= 0; --i) {
temp_rem = (temp_rem << 1) | ((dividend.lo >> i) & 1);
if (temp_rem >= divisor) {
quotient.lo |= (1ULL << i);
temp_rem -= divisor;
}
}
*remainder = temp_rem;
return quotient;
}

Reply
Topic Options
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page