<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic C++ code for uint128_t divide_uint128_by_uint64(...) in Intel® oneAPI Math Kernel Library</title>
    <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/C-code-for-uint128-t-divide-uint128-by-uint64/m-p/1654177#M36798</link>
    <description>&lt;P&gt;How to program function in C++ in Visual Studio 2022&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;&lt;LI-CODE lang="markup"&gt;uint128_t divide_uint128_by_uint64(uint128_t dividend, uint64_t divisor, uint64_t* remainder)&lt;/LI-CODE&gt;&lt;P&gt;&lt;BR /&gt;without using big number libraries? Note the result can exceed 64-bit i.e. I can't use _udiv128 intrinsic.&lt;BR /&gt;&lt;BR /&gt;Do you know of a link to the Intel sample code?&lt;/P&gt;</description>
    <pubDate>Sat, 04 Jan 2025 00:21:17 GMT</pubDate>
    <dc:creator>richter__dan</dc:creator>
    <dc:date>2025-01-04T00:21:17Z</dc:date>
    <item>
      <title>C++ code for uint128_t divide_uint128_by_uint64(...)</title>
      <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/C-code-for-uint128-t-divide-uint128-by-uint64/m-p/1654177#M36798</link>
      <description>&lt;P&gt;How to program function in C++ in Visual Studio 2022&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;&lt;LI-CODE lang="markup"&gt;uint128_t divide_uint128_by_uint64(uint128_t dividend, uint64_t divisor, uint64_t* remainder)&lt;/LI-CODE&gt;&lt;P&gt;&lt;BR /&gt;without using big number libraries? Note the result can exceed 64-bit i.e. I can't use _udiv128 intrinsic.&lt;BR /&gt;&lt;BR /&gt;Do you know of a link to the Intel sample code?&lt;/P&gt;</description>
      <pubDate>Sat, 04 Jan 2025 00:21:17 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/C-code-for-uint128-t-divide-uint128-by-uint64/m-p/1654177#M36798</guid>
      <dc:creator>richter__dan</dc:creator>
      <dc:date>2025-01-04T00:21:17Z</dc:date>
    </item>
    <item>
      <title>Re: C++ code for uint128_t divide_uint128_by_uint64(...)</title>
      <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/C-code-for-uint128-t-divide-uint128-by-uint64/m-p/1654222#M36799</link>
      <description>&lt;P&gt;What do you think about this code:&lt;/P&gt;&lt;LI-CODE lang="markup"&gt;struct uint128_t {
    uint64_t hi;
    uint64_t lo;
};&lt;/LI-CODE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;LI-CODE lang="markup"&gt;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 &amp;gt;= 0; --i) {
        temp_rem = (temp_rem &amp;lt;&amp;lt; 1) | ((dividend.hi &amp;gt;&amp;gt; (i - 64)) &amp;amp; 1);
        if (temp_rem &amp;gt;= divisor) {
            quotient.hi |= (1ULL &amp;lt;&amp;lt; (i - 64));
            temp_rem -= divisor;
        }
    }
    for (int i = 63; i &amp;gt;= 0; --i) {
        temp_rem = (temp_rem &amp;lt;&amp;lt; 1) | ((dividend.lo &amp;gt;&amp;gt; i) &amp;amp; 1);
        if (temp_rem &amp;gt;= divisor) {
            quotient.lo |= (1ULL &amp;lt;&amp;lt; i);
            temp_rem -= divisor;
        }
    }
    *remainder = temp_rem;
    return quotient;
}&lt;/LI-CODE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Sat, 04 Jan 2025 10:03:08 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/C-code-for-uint128-t-divide-uint128-by-uint64/m-p/1654222#M36799</guid>
      <dc:creator>richter__dan</dc:creator>
      <dc:date>2025-01-04T10:03:08Z</dc:date>
    </item>
  </channel>
</rss>

