2013-07-16 76 views
1

我写了下面的代码,但我遇到了一个问题。当我将1059255除以1时,结果将为零,因为除法的结果接近零并且变得圆整。我如何得到结果除零以外的结果

for(x = 2 ; x <= 1059255; x++) 
{ 
    y += (1/1059255) * x; 
} 

需要进行哪些更改才能获得正确结果?

回答

6

这是整数除法。如果将x/y除以x小于y,则结果将始终为0.将这些数字中的任意一个转换为浮点数。

这里有一些可能性:

y += (1.0f/1059255) * x; // float literal divide by integer, this will work 

y += (static_cast<float>(1)/1059255) * x; // casting integer literal to float, this works too 

很明显,你可以做分母的浮动太大,这都可以用做双打也。

2

这是因为它是一个整数除法。使操作数浮点或双精度:

y += (1.0/1059255)*x; 
0

使用浮点数类型,如float或double。

1

因为1/1059255是整数除法0

将其更改为1.0/1059255会得到你预期的结果。

请注意,1.0double类型,1.0ffloat类型,请选择适当的一种。

1

你会想要的东西,像这样:

const int start = 2; 
const int end = 1059256; 
float result = 0.0f; 
for(int x = start; x < end; ++i){ 
    result += 1.0f/float(MAX) * x; 
} 

你在做什么是整数除法,从而有效地丢弃小数点,只是保持整个整数。

0

试试这个:

for(x = 2 ; x <= 1059255; x++) 
{ 
    y += (1.0/1059255.0)*x; 
} 
0

使用本司内部漂浮物,使乘法也得到正确的:

for(x = 2 ; x <= 1059255; x++) 
{ 
    y += (float(1)/1059255)*x; 
} 
1

您需要使用的类型,可以代表不是整数其他号码。无论你是想浮点或定点类型取决于精确度是多么的重要。但是,使用浮点数很容易。

double x, y = 0; 
for(x = 2 ; x <= 1059255; x++) 
{ 
    y += (1.0/1059255.0)*x; 
} 

如果您发现错误的数量是不可接受的,请查看定点数字。

1

在C++中的一个整数两个整数除法的结果。在这种情况下,您将分割两个整数,所以结果将总是被截断为0

我不能肯定地告诉从你的问题,但你可能想浮点除法,你可以通过添加后缀.0的字面力。此外,我看不出有任何理由要改变一个部门+繁衍成一个单一的部门:

for(x = 2 ; x <= 1059255; x++) 
{ 
    y += x/1059255.0; 
} 

但是,如果这是你真正的代码,我们没有理由做循环,就好象你可以随时计算出结果恒定时间(因为内部循环项与循环索引值成线性比例)。