我创建了一个小程序,它应该使用c++中莱布尼茨公式的前26次迭代来计算圆周率,看看它是否有效。当我运行代码时,它输出4而不是浮点数。这是怎么回事,我怎么才能修复它?代码如下:
#include <iostream>
#include <math.h>
using namespace std;
int main ()
{
float a = 1/1;
float b = 1/3;
float c = 1/5;
float d = 1/7;
float e = 1/9;
float f = 1/11;
float g = 1/13;
float h = 1/15;
float i = 1/17;
float j = 1/19;
float k = 1/21;
float l = 1/23;
float m = 1/25;
float n = 1/27;
float o = 1/29;
float p = 1/31;
float q = 1/33;
float r = 1/35;
float s = 1/37;
float t = 1/39;
float u = 1/41;
float v = 1/43;
float w = 1/45;
float x = 1/47;
float y = 1/49;
float z = 1/51;
float a1 = a-b+c-d+e-f+g-h+i-j+k-l+m-n+o-p+q-r+s-t+u-v+w-x+y-z;
float b1 = a1*4;
cout << b1;
}是的,我知道有更简单的方法可以做到这一点,但这只是一个概念证明。
发布于 2016-10-17 13:20:21
当您使用:
float b = 1/3;赋值运算符的RHS使用整数除法进行计算,结果为0。除a的值为1外,其他所有变量的值都为0。
为了避免这种情况,请使用
float b = 1.0f/3;或
float b = 1.0/3;对所有其他语句进行类似的更改。
发布于 2016-10-17 13:48:24
另一种方法是使用强制转换
float a = (float)1/1; // C-style cast或
float a = float(1)/1; https://stackoverflow.com/questions/40078889
复制相似问题