当前位置: 首页 > 知识库问答 >
问题:

计算变量并进行比较[重复]

冯敏达
2023-03-14

很抱歉,如果以前有人问过这个问题,但我非常不确定如何制定我的搜索以获得任何相关结果。

基本上,我有一个类“Wheel”,在该类中,我声明==操作符应该如何工作:

    bool operator == (Wheel& anotherWheel){
    //Circumference of a wheel, times its RPM should give its speed
    //The speed will be in what ever unit the radius is, per minute
    double ourSpeed = 2 * PI * radius * rpm; 
    double anotherSpeed = 2 * PI * anotherWheel.getRadius() * anotherWheel.getRpm();

    cout << ourSpeed << " vs " << anotherSpeed << endl;
    if (ourSpeed == anotherSpeed){
        return true;
    }

    return false;

除非车轮的半径和转速与其他车轮相同,否则此操作有效,除非已切换。因此,换句话说,对于以下情况,它不会返回true:

2*PI*3*10 vs 2*PI*10*3

即使我把它打印出来,并且它们在控制台中是完全一样的(除非我的基本数学知识完全不正常)。

我在计算速度时添加了一个偏执,从而解决了这个问题:

        double ourSpeed = 2 * PI * (radius * rpm); 
        double anotherSpeed = 2 * PI * (anotherWheel.getRadius() * anotherWheel.getRpm());

但我想理解为什么会发生这种情况,π只是我声明的一个常数,所以这不重要。

谢谢

共有1个答案

章彬郁
2023-03-14

使用浮点数时要小心。

根据您添加浮点数的顺序,一组浮点数的添加可能会有所不同。乘法和其他各种运算也是如此。

这是因为精度限制导致的舍入。

e、 g.1/3 1/3=2/3

然而

0.33333334 0.33333334=0.6666668而不是0.6666667,这是2/3的理想值。

您将需要使用一个公差级别,以确定该值是否足够接近,被认为是相等的。

一个非常基本(幼稚且不灵活)的选择是:

if(fabs(a - b) < 0.001)

但是有更好的方法。

如果你真的想理解浮点数,从这里开始:Oracle浮点数-它会告诉你你需要知道的一切,还有更多。

 类似资料:
  • 我想用Java做一个程序来比较两个三角形。比较角度的顺序无关紧要,我知道我可以用语句来做,但有没有其他更有效的方法来比较3个角度和另外3个角度,因为三角形旋转并不重要,因为完全相同?(Java语言)

  • 我一直在试图理解是否有可能使用类似于我在下面演示的if语句。我的理解是不是? 有了这段代码,我只得到数字

  • 问题内容: 我有一个学校的作业,任务之一是解释很多小的计算,并解释为什么Java给您输出它给您的输出。 计算之一是: 1 +‘2’+ 3 这对我来说是一个词汇错误,因为老师在我的系统上使用了错误的“撇号”,但是我与其他同学交谈,他们告诉我他们得到了实际的输出,因此我开始阅读并发现了认为它应该表示一个char变量,并且我也了解 了系统的特定类型,所以我更改了符号以使其适用于我的系统,现在我得到了答案

  • 测试变量的常用方法是检查它是否引用singletone: 根据PEP-8,建议将此方法作为检查的唯一方法: 与None之类的单例进行比较时,应始终使用is或is,永远不要使用相等运算符。 虽然有时我发现以下测试在不同的来源: 这种方式看起来不错,但是我不太明白为什么简单易读的结构可以被所取代。它在某些情况下更有用,还是指代码风格? UPD:使用我发现非常有用(到目前为止):

  • 有没有更简洁的方法来做到这一点? 编辑:我的问题确实是重复的。对于任何阅读这篇文章的人,我建议再看看其他的线程--它们有一些好的东西。

  • 在Spark dataframe列中获取最大值的最佳方法 这篇文章展示了如何在表上运行聚合(distinct、min、max),如下所示: null