我编了一个类,给它定义构造函数时候,如下
class doing
{
private float a[];
private float b[];
private int n;
private float sum;
doing(int n)
{
a=new float[n];
b=new float[n];
this.n=n;
sum=0;
a[0]=1.0;
a[1]=2.0;
if(n>=2)
{
for (int i=2;i<n;i++)
{
a[i]=a[i-1]+a[i-2];
}
b[0]=2.0;
b[1]=3.0;
for (int i=2;i<n;i++)
{
b[i]=b[i-1]+b[i-2];
}
}
}
编译时候,编译器报错,地方在a[0]=1.0 a[1]=2.0 b[0]=2.0 b[1]=3.0 这四个地方,错误提示是可能损失精度。但是我把他们后面的.0去掉后就能编译通过,但是结果却得不到正确的精度,损失了很打的精度。这是为什么???我前面定义的是float型的啊????各路朋友解答一下,谢谢!!我会及时给分的。
class doing
{
private float a[];
private float b[];
private int n;
private float sum;
doing(int n)
{
a=new float[n];
b=new float[n];
this.n=n;
sum=0;
a[0]=1.0;
a[1]=2.0;
if(n>=2)
{
for (int i=2;i<n;i++)
{
a[i]=a[i-1]+a[i-2];
}
b[0]=2.0;
b[1]=3.0;
for (int i=2;i<n;i++)
{
b[i]=b[i-1]+b[i-2];
}
}
}
编译时候,编译器报错,地方在a[0]=1.0 a[1]=2.0 b[0]=2.0 b[1]=3.0 这四个地方,错误提示是可能损失精度。但是我把他们后面的.0去掉后就能编译通过,但是结果却得不到正确的精度,损失了很打的精度。这是为什么???我前面定义的是float型的啊????各路朋友解答一下,谢谢!!我会及时给分的。
a[1]=2.0f;1.0这样的数是double类型你要显式的用f后缀定义float