算法小记——实现数学计算Math

常见Math运算的实现

1. 不用+实现加法

*思路:将数转为二进制,进行加法,发现分为两步,相加(不进位,用异或^)与进位(用相与&)

int Add(int a, int b) {
    int sum = 0;
    int a_copy = a; 
    int b_copy = b;
    int carry = 0;
    do 
    {
        sum = a_copy ^ b_copy;
        //carry is produced with moving upper
        carry = (a_copy & b_copy) << 1;
        a_copy = sum;
        b_copy = carry;
    } while (b_copy);
    return sum;
}

2. 不用库函数实现开方

常见思路有:二分法,牛顿法等

//二分法实现

//另一种
double Sqrt(double A)  
{  
    double a = 0.0, b = A + 0.25, m; // b = A 是错误的上界  

    // while(b - a > 2*DBL_EPSILON) { // sometimes dead cycle when m==a or m==b.  
    for(;;) {  
        m = (b + a)/2;  
        if( m-a < DBL_EPSILON || b-m < DBL_EPSILON ) break;   
        if( (m*m - A) * (a*a - A) < 0 ) b = m;  
        else a = m;  
    }  
    return m;  
}  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值