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
notfloat
Hum。有趣。如果您直接编写python指数呢?另外,来自intmain()
的可编译示例以及python代码段的类似示例可能会避免出现问题。从输入读取:对p
进行硬编码。欢迎使用浮点运算。检查这个问题:我猜python在引擎盖下使用了cmath,区别在于解析。C++给出了与STD::POW(1.F- P,2。f)相同的结果,是的,如果你按照你的方式进行,这是显而易见的。差别太大了,不可能是别的。投票表决吧,你们两个在这里都是完全错误的。它们都使用float,但精度不同。请看代码,两者都使用float。@EamonnKenny:我不同意。请参阅<代码> *>代码>在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