当前位置: 首页>>代码示例>>C++>>正文


C++ BigFloat::add方法代码示例

本文整理汇总了C++中BigFloat::add方法的典型用法代码示例。如果您正苦于以下问题:C++ BigFloat::add方法的具体用法?C++ BigFloat::add怎么用?C++ BigFloat::add使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在BigFloat的用法示例。


在下文中一共展示了BigFloat::add方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: Pi_BSR

////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
//  Pi
void Pi_BSR(BigFloat &P,BigFloat &Q,BigFloat &R,uint32_t a,uint32_t b,size_t p){
    //  Binary Splitting recursion for the Chudnovsky Formula.

    if (b - a == 1){
        //  P = (13591409 + 545140134 b)(2b-1)(6b-5)(6b-1) (-1)^b
        P = BigFloat(b).mul(545140134);
        P = P.add(BigFloat(13591409));
        P = P.mul(2*b - 1);
        P = P.mul(6*b - 5);
        P = P.mul(6*b - 1);
        if (b % 2 == 1)
            P.negate();

        //  Q = 10939058860032000 * b^3
        Q = BigFloat(b);
        Q = Q.mul(Q).mul(Q).mul(26726400).mul(409297880);

        //  R = (2b-1)(6b-5)(6b-1)
        R = BigFloat(2*b - 1);
        R = R.mul(6*b - 5);
        R = R.mul(6*b - 1);

        return;
    }

    uint32_t m = (a + b) / 2;

    BigFloat P0,Q0,R0,P1,Q1,R1;
    Pi_BSR(P0,Q0,R0,a,m,p);
    Pi_BSR(P1,Q1,R1,m,b,p);

    P = P0.mul(Q1,p).add(P1.mul(R0,p),p);
    Q = Q0.mul(Q1,p);
    R = R0.mul(R1,p);
}
开发者ID:qiongzhu,项目名称:Mini-Pi,代码行数:38,代码来源:mini-pi_optimized_1_cached_twiddles.cpp

示例2: Pi_BSR

////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
//  Pi
void Pi_BSR(BigFloat &P,BigFloat &Q,BigFloat &R,uint32_t a,uint32_t b,size_t p,int tds = 1){
    //  Binary Splitting recursion for the Chudnovsky Formula.

    if (b - a == 1){
        //  P = (13591409 + 545140134 b)(2b-1)(6b-5)(6b-1) (-1)^b
        P = BigFloat(b).mul(545140134);
        P = P.add(BigFloat(13591409));
        P = P.mul(2*b - 1);
        P = P.mul(6*b - 5);
        P = P.mul(6*b - 1);
        if (b % 2 == 1)
            P.negate();

        //  Q = 10939058860032000 * b^3
        Q = BigFloat(b);
        Q = Q.mul(Q).mul(Q).mul(26726400).mul(409297880);

        //  R = (2b-1)(6b-5)(6b-1)
        R = BigFloat(2*b - 1);
        R = R.mul(6*b - 5);
        R = R.mul(6*b - 1);

        return;
    }

    uint32_t m = (a + b) / 2;

    BigFloat P0,Q0,R0,P1,Q1,R1;

    if (b - a < 1000 || tds < 2){
        //  No more threads.
        Pi_BSR(P0,Q0,R0,a,m,p);
        Pi_BSR(P1,Q1,R1,m,b,p);
    }else{
        //  Run sub-recursions in parallel.
        int tds0 = tds / 2;
        int tds1 = tds - tds0;
#pragma omp parallel num_threads(2)
        {
            int tid = omp_get_thread_num();
            if (tid == 0){
                Pi_BSR(P0,Q0,R0,a,m,p,tds0);
            }
            if (tid != 0 || omp_get_num_threads() < 2){
                Pi_BSR(P1,Q1,R1,m,b,p,tds1);
            }
        }
    }

    P = P0.mul(Q1,p,tds).add(P1.mul(R0,p,tds),p);
    Q = Q0.mul(Q1,p,tds);
    R = R0.mul(R1,p,tds);
}
开发者ID:phanindharbodla,项目名称:Mini-Pi,代码行数:56,代码来源:mini-pi_optimized_3_OpenMP.cpp

示例3: main

int main()
{
	BigFloat *sum;
	sum = new BigFloat(0.0);
	
	for ( int i = 1; i <= 100 ; i ++)
	{
		BigFloat index(1.0);
		BigFloat temp((double)i);
		if ( 0 == index.divide(&index, &temp))
			sum->add(sum,&index);
		else
		{
			printf("error");
			exit(1);
		}
	}
	sum->printAll();
	sum->print_fraction_portion_in_decimal(1000,NULL);
}
开发者ID:wxjeacen,项目名称:BigFloat,代码行数:20,代码来源:main.cpp


注:本文中的BigFloat::add方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。