одержат младшие, средние и старшие 32 бита 96-разрядного целого числа
Немного не понял почему у вас число 2 147 483 648 - {0, 1, 0, 0}, а не 2 147 483 648 - {2 147 483 647, 1, 0, 0}
carry += c.bits[i + j] + (long long)a.bits[i] * b.bits[j];
{{98656,8,0,0}}, так как 4444 * 222 = 986 568
from decimal import *
import math
getcontext().prec = 400
a = Decimal('2908337335267882719112393218356660694028796020413339889344001');
b = Decimal('199577786472534580238277135938482051708016612125502091367466650497922405808640000')
c = Decimal('199577786472534580238277135938482051708016612125502091367466856365842937955328680')
print(pow(pow(a,3) + pow(b,3) - 1, Decimal(1)/Decimal(3)) - c)
print(pow(a,3)+pow(b,3)-pow(c,3))
Вообще, константы кладуться в отдельную секцию в исполняемом файле (.rodata, но это не точно) и вся эта секция загружается в память. Переменные же не лежат в экзешнике в основном, и выделяются при загрузке в исполняемого файла. Это довольно разные сценарии, поэтому ничего удивтельного, что там переменные по разному расположены.