数组中另一个上的C无符号长溢出

数组中另一个上的C无符号长溢出,c,c99,integer-overflow,unsigned-long-long-int,C,C99,Integer Overflow,Unsigned Long Long Int,假设我有一个无符号long-long数组,有没有办法将溢出放入下一个ull?我想要确切的数字,所以不能选择双倍。 现在,这就是我所拥有的: #include <stdio.h> unsigned long long d[2] = {1,0}, n[2] = {0,0}; // denominator, numerator unsigned long long nd = 1; int main(int argc,char* argv[]) { while(1){

假设我有一个
无符号long-long
数组,有没有办法将溢出放入下一个
ull
?我想要确切的数字,所以不能选择双倍。 现在,这就是我所拥有的:

#include <stdio.h>

unsigned long long d[2] = {1,0}, n[2] = {0,0}; // denominator, numerator
unsigned long long nd = 1;

int main(int argc,char* argv[])
{
    while(1){

        if(nd+2 < nd) // next denominator greater than 2^64-1
            return 0;
        // n = n*nd + d
        n[0] = n[0] * nd + d[0];
        // n[1] += *overflow    <------
        n[1] = n[1] * nd + d[1];
        d[0] *= nd;
        // d[1] += *overflow    <------
        d[1] *= nd;
        printf("current denominator: %llu -> 4*%llu/%llu\n", nd, n, d);
        nd += 2; //increment next denominator
    }
}
#包括
无符号长d[2]={1,0},n[2]={0,0};//分母,分子
无符号长nd=1;
int main(int argc,char*argv[])
{
而(1){
if(nd+2//n[1]+=*溢出没有简单的解决方案,除非编译器的整数类型大于
无符号长
如果您只需要它来处理
无符号长
=64位的情况,那么(a)使用
uint64\u t
,以及(b)