gpt4 book ai didi

c++ - Floor,int 转换对于大值不能正常工作

转载 作者:行者123 更新时间:2023-11-27 23:19:20 27 4
gpt4 key购买 nike

我有一个问题。我在“invKin”类中获得了这个函数,以便在运行模拟之前设置一些参数:

void IK_mm4::set_timesetting(double *T_horiz_, double *delta_t_)
{
T_horiz = T_horiz_;
delta_t = delta_t_;

k_end = (int)floor((*T_horiz)/(*delta_t));

cout << "k_end = " << k_end <<endl;
}

它在我的主文件中被调用

...
double delta_t = 5e-3;
double *T_desired = new double(5.0);
...
invKin.set_timesetting(T_desired,&delta_t);
...

问题来了。在我大学的 PC 上,一切都很好,k_end 的值应该是“1000”。在我的家用电脑上,系统以某种方式返回值“999”。如果我将 *T_desired 的值更改为“0.05”,cout 会在两台 PC 上给出正确的值“10”。

我已经检查过使用变量

double k_end_test = (*T_horiz)/(*delta_t);

这是给出“1000”的正确解。错误必须在 floor 函数或 int 转换中。如果我这样做

int k_end_test2 = (int)(k_end_test);

double k_end_test2 = floor(k_end_test);

结果始终为“999”。

有人知道这是从哪里来的吗?

我感谢任何类型的提示!谢谢!

最佳答案

这是有限精度表示的本质。

例如,考虑六位小数的精度。当然,这不是 double 使用的,但概念完全相同。 1/3.333333,小数点后六位。所以 30 * (1/3)9.99999。如果向下舍入为整数,则得到 9,而不是 10。这就是您遇到的问题。

如果您不想要这种行为,请不要使用 float 。

向传递给 floor 的值添加一个小的“delta”可能就足够了。

关于c++ - Floor,int 转换对于大值不能正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14477562/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com