Systemc - 四舍五入 sc_time 到最接近的第 10 位 SC_NS

Systemc - Rounding off sc_time to nearest 10th SC_NS

我正在尝试将 sc_time 四舍五入到最接近的 10 纳秒。 / 已重载,因此可以划分两个 sc_time* 也被 sc_timedouble 值重载。对于这段代码,我得到的是 6 而不是 10.

#include <iostream>
#include "systemc.h"

SC_MODULE(X)
{
    SC_CTOR(X)
    {
        SC_THREAD(a);

    }
    void a()
    {   
    sc_time t(6, SC_NS);
    sc_time t1(10, SC_NS);
    double v = (t / t1) *10;
    std::cout << "sc_time update:/ " << v << "\n";


    }
};

int sc_main( int , char* [] )
{
    sc_clock clock;
    X x("x");

    sc_start(1000, SC_NS);

    cout << "Program completed" << endl;
    return 0;
} 

快速浏览 sc_time header https://github.com/systemc/systemc-2.3/blob/master/src/sysc/kernel/sc_time.h 表明它使用双精度数进行数学运算,因此 6/10*10==6 您需要添加一个显式回合也就不足为奇了:

double v = round(t / t1) *10;