我知道这是一个非常普遍和基本的问题,但其他线程并没有帮助我解决我的问题.我对c ++比较陌生,但有很好的python知识.
double pi = 4/1 - 4/3 + 4/5 - 4/7 + 4/9;
std::cout << "This is pi: " << pi;
Run Code Online (Sandbox Code Playgroud)
所以这总是返回"3".
我在其他线程中读到这是因为我用整数计算所以我尝试了类似的东西
double(4)/1 - 4/3 ...
double(4/1 - 4/3 ...)
double(4/1) - 4/3 ...
他们仍然返回3 ?? 为什么
您需要确保在计算的每个步骤中使用浮点值,而不仅仅是在开始时.
拿你原来的代码:
double pi = 4/1 - 4/3 + 4/5 - 4/7 + 4/9;
Run Code Online (Sandbox Code Playgroud)
在编译器方面,这分为几个步骤:
//Does not model any specific compiler, is only modeling the general sequence a compiler might follow
__compiler int r1 = 4 / 1; //4
__compiler int r2 = 4 / 3; //1
__compiler int r3 = 4 / 5; //0
__compiler int r4 = 4 / 7; //0
__compiler int r5 = 4 / 9; //0
double pi = 0;
pi += r1;
pi -= r2;
pi += r3;
pi -= r4;
pi += r5;
Run Code Online (Sandbox Code Playgroud)
你看到了问题吗?
如果要确保此代码按预期运行,double请将每个数字单独转换为或者将它们声明为就地浮点值.
double pi = 4.0/1 - 4.0/3 + 4.0/5 - 4.0/7 + 4.0/9;
Run Code Online (Sandbox Code Playgroud)
这将产生您期望的行为.确保还要查看运算符优先级的C++规则.
| 归档时间: |
|
| 查看次数: |
58 次 |
| 最近记录: |