Systemc - 四舍五入 sc_time 到最接近的第 10 位 SC_NS
Systemc - Rounding off sc_time to nearest 10th SC_NS
我正在尝试将 sc_time 四舍五入到最接近的 10 纳秒。 /
已重载,因此可以划分两个 sc_time
。 *
也被 sc_time
和 double
值重载。对于这段代码,我得到的是 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;
我正在尝试将 sc_time 四舍五入到最接近的 10 纳秒。 /
已重载,因此可以划分两个 sc_time
。 *
也被 sc_time
和 double
值重载。对于这段代码,我得到的是 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;