C++中整型乘以0.01快还是除以100快?

相关代码及说明请见下文:

int64_t mulFunc(int64_t a)
{
    return (int64_t)(a * 0.01);
}

int64_t divFunc(int64_t a)
{
    // 注意,除数必须是整型, 例如你不能把100改为100.0。如果你改了,计算速度将大幅下降(因为这样一来将计算过程变为浮点运算)
    return a / 100;
}

int64_t mulFunc(double a)
{
    return (int64_t)(a * 0.01);
}

int64_t divFunc(double a)
{
    return a / 100;
}

int64_t testMathCalc()
{
    // thanks: https://www.zhihu.com/question/458395216
    auto tot            = 10000 * 10000;
    auto start_sys_time = std::chrono::system_clock::now();

    int64_t value = 0;
    for (auto i = 0; i < tot; ++i)
    {
        value = mulFunc(i + 5 + value);
    }
    auto current_sys_time = std::chrono::system_clock::now();
    auto elapsedSysTime   = current_sys_time - start_sys_time;
    auto lossTime         = std::chrono::duration_cast<std::chrono::microseconds>(elapsedSysTime).count();
    std::cout << "mulFunc lossTime: " << lossTime << " us." << std::endl;

    start_sys_time = std::chrono::system_clock::now();

    for (auto i = 0; i < tot; ++i)
    {
        value = divFunc(i + 5 + value);
    }
    current_sys_time = std::chrono::system_clock::now();
    elapsedSysTime   = current_sys_time - start_sys_time;
    lossTime         = std::chrono::duration_cast<std::chrono::microseconds>(elapsedSysTime).count();
    std::cout << "divFunc lossTime: " << lossTime << " us." << std::endl;



    auto value1 = 0;
    double doubleValue = 10.1;
    for (auto i = 0; i < tot; ++i)
    {
        value1 = mulFunc(i + doubleValue + value1);
    }
    current_sys_time = std::chrono::system_clock::now();
    elapsedSysTime   = current_sys_time - start_sys_time;
    lossTime         = std::chrono::duration_cast<std::chrono::microseconds>(elapsedSysTime).count();
    std::cout << "double mulFunc lossTime: " << lossTime << " us." << std::endl;

    start_sys_time = std::chrono::system_clock::now();

    doubleValue    = 20.2;
    for (auto i = 0; i < tot; ++i)
    {
        value1 = divFunc(i + doubleValue + value1);
    }
    current_sys_time = std::chrono::system_clock::now();
    elapsedSysTime   = current_sys_time - start_sys_time;
    lossTime         = std::chrono::duration_cast<std::chrono::microseconds>(elapsedSysTime).count();
    std::cout << "double divFunc lossTime: " << lossTime << " us." << std::endl;
    return value + value1;

    /*
    结论: 如果是整型除以整型,则这里的测试除法速度快,实际反应出来的原则是:
        1. 整型乘除法的计算速度都比浮点乘除法计算速度快(计算速度可看作时钟周期数量)
        2. 浮点乘法速度比浮点除法速度快
    */

}

打印结果输出:

(整数乘以0.01) mulFunc lossTime:         314071 us.
(整数除以100)  divFunc lossTime:         176478 us.
(浮点数乘法)   double mulFunc lossTime:  508600 us.
(浮点数除法)   double divFunc lossTime:  527787 us.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值