【问题标题】:Discrepancy in the value stored in two variables having the same integral part [duplicate]存储在具有相同整数部分的两个变量中的值的差异[重复]
【发布时间】:2014-08-01 07:13:00
【问题描述】:

我试图找到 10^12 的立方根,并在 c++ 中使用了以下代码。令我惊讶的是,返回的值是不同的。谁能帮我解决这个问题。

输出:10000 9999

    int y;
    double x=pow(1000000000000, 1./3);
    double r=floor(x);
    y=(int)r;
    cout<<x<<" ";
    cout<<y;

【问题讨论】:

  • 这是作业题还是什么?最近我们似乎遇到了很多关于pow(x, 1./3) 的问题......

标签: c++ int double type-conversion


【解决方案1】:

您的floor 操作是这里的问题。如果返回值实际上是(由于精度错误)x = 9999.999,该怎么办? floor(x) 将返回 9999,而 cout &lt;&lt; x 根据其内部精度设置直接打印浮点数,因此 cout &lt;&lt; x 进行隐式舍入,这就是为什么在那里显示 10000。

尝试通过执行以下操作将 x 正确舍入为 int:

int y;
double x=pow(1000000000000, 1./3);
y=(int)(x+0.5); //Proper rounding
cout<<x<<" ";
cout<<y;
return 0;

【讨论】:

    【解决方案2】:
    double x=pow(1000000000000, 1./3);
    

    只是糟糕的 1/3 不能用 double 显示。

    至少可以说,在处理双重结果时总是很有趣。 0.001 + 0.001 可能只是 0.0

    【讨论】:

    • “[I]s just bad”、“displayed with double”、“总是很有趣”、“可能只是 0.0”是一组错位的短语。
    猜你喜欢
    • 2019-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-15
    • 1970-01-01
    • 2021-09-01
    • 1970-01-01
    • 2020-12-28
    相关资源
    最近更新 更多