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

Python 相同的算术运算在C+中给出不同的结果+;和蟒蛇,python,c++,floating-point,Python,C++,Floating Point,我必须找到函数f(x)=x/(1-x)^2的结果,其中0是单精度的。使用double而不是float应该会得到类似的输出 #include <cstdio> #include <cstdlib> #include <iostream> #include <iomanip> int main() { const char data[] = "0.84567"; float x; sscanf(data, "%f",&

我必须找到函数
f(x)=x/(1-x)^2
的结果,其中
0
。 该值的格式只能设置为小数点后6位

这是我的C++代码:

float x; scanf("%f",&x);
printf("%.6f",x/((1-x)*(1-x)));
我在Python中也是这样做的:

 x = float(input()) 
 print ("%.6f" % (x/((1-x)**2)))
对于x的某些值,两个程序给出了不同的答案

例如,对于
x=0.84567

C++给出了
35.505867
,Python给出了
35.505874

为什么会发生这种情况?

根据解决方案,Python答案是正确的,而C++答案是错误的。

< P> Python已经实现了IEEE 754的双精度,所以它的输出更接近真实答案。 从文件:

今天(2000年11月)几乎所有的机器都使用IEEE-754浮点 几乎所有的平台都将Python浮动映射到IEEE-754 “双精度”

在C++浮点中,P>是单精度的。使用
double
而不是
float
应该会得到类似的输出

#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;
}
结论:


Python使用的是double,您使用的是float。

正如其他人所指出的,Python中的浮点数是使用C中的
double
类型实现的。请参阅Python文档的第页

在以下服务器上运行此示例:


浮点没有对与错,只是或多或少的准确度。顺便说一句,如果你真的关心精度,那么你应该使用
doule
not
float
Hum。有趣。如果您直接编写python指数呢?另外,来自
intmain()
的可编译示例以及python代码段的类似示例可能会避免出现问题。从输入读取:对
p
进行硬编码。欢迎使用浮点运算。检查这个问题:我猜python在引擎盖下使用了cmath,区别在于解析。C++给出了与STD::POW(1.F- P,2。f)相同的结果,是的,如果你按照你的方式进行,这是显而易见的。差别太大了,不可能是别的。投票表决吧,你们两个在这里都是完全错误的。它们都使用float,但精度不同。请看代码,两者都使用float。@EamonnKenny:我不同意。请参阅<代码> *>代码>在双<代码>或“更高”中的力评估。在Python中,“EMANNKNY每代码>浮点是C++中的代码>双< /COD>。如果你使用(1-p)*(1-p),你会得到相同的答案。stackoverflow不是这方面的权威,Stroustrup是。精度有差别。上述结论是完全错误的。
35.505867
35.505874
#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;
}
35.505867
35.505874