相同的算术运算在C++和Python中给出不同的结果。

2024-06-23 20:03:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我必须找到函数f(x) = x / (1-x)^2的结果,其中0 < x < 1。 该值的格式只能是6个小数位。在

这是我的C++代码:

float x; scanf("%f",&x);
printf("%.6f",x/((1-x)*(1-x)));

我在Python中也是这样做的:

^{pr2}$

对于x的某些值,两个程序给出了不同的答案。在

例如,对于x = 0.84567

C++给出了^ {CD5>},Python给出了{{CD6>}

为什么会这样?
根据解决方案,Python答案是正确的,而C++答案是错误的。在


Tags: 函数答案代码程序格式错误解决方案float
3条回答

正如其他人所指出的,python中的浮点数是使用C中的double类型实现的。在

Coliru上运行此示例:

#include <cmath>
#include <cstdio>

int main()
{
    float pf = 0.84567f;
    printf("%.6f\n",pf/((1-pf)*(1-pf)));

    double pd = 0.84567;
    printf("%.6f\n",pd/((1-pd)*(1-pd)));

    return 0;
}

展示了不同之处:

^{pr2}$

Python实现了ieee754双精度,所以它的输出更接近真实答案。在

来自文档:https://docs.python.org/3/tutorial/floatingpoint.html#representation-error

Almost all machines today (November 2000) use IEEE-754 floating point arithmetic, and almost all platforms map Python floats to IEEE-754 “double precision”.

在C++浮点中,P>是单精度的。{{cd2>应该使用相似的输出。在

#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <iomanip>

int main()
{
    const char data[] = "0.84567";
    float x; 
    sscanf(data, "%f",&x);

    double x2;
    sscanf(data, "%lf",&x2);

    std::cout << std::setprecision(8) << (x/((1-x)*(1-x))) << std::endl;
    std::cout << std::setprecision(8) << (x2/((1-x2)*(1-x2))) << std::endl;
}

样本输出:

^{pr2}$

结论:

Python使用double,而您使用float。在

相关问题 更多 >

    热门问题