C# float double精度损的的问题
来源:互联网 发布:买电动车上淘宝 编辑:程序博客网 时间:2024/05/18 15:08
在工作中我发现了一个C#浮点数的精度问题,以下的程序运行结果并未得到我预期的结果:
01
namespace
FloatTest
02
{
03
class
Program
04
{
05
static
void
Main(
string
[] args)
06
{
07
double
a = 0.0001;
08
float
b = 0.1F;
09
10
int
c = (
int
)((a * 1000) / b);
11
12
Console.WriteLine(
"c = {0}"
, c);
13
14
Console.ReadLine();
15
}
16
}
17
}
我期望的结果是得到1,结果程序返回的结果为c = 0
这让我想到了可能是因为浮点数采用IEEE754的表示方法,在运算中b会转换成double,可能是在转换中算法的问题导致精度丢失,为了证实该问题,我做了下面的实验:
01
namespace
FloatTest
02
{
03
class
Program
04
{
05
static
void
Main(
string
[] args)
06
{
07
double
a = 0.0001;
08
float
b = 0.1F;
09
10
int
c = (
int
)((a * 1000) / b);
11
12
Console.WriteLine(
"a = {0}"
, a);
13
Console.WriteLine(
"b = {0}"
, Convert.ToDouble(b));
14
Console.WriteLine(
"c = {0}"
, c);
15
16
Console.ReadLine();
17
}
18
}
19
}
这次果然得到了意料中的结果:float在转成double的时候出现了精度的丢失问题
a = 0.0001
b = 0.100000001490116
c = 0
如果是在类型转换的时候导致的精度丢失,那我把b改为double应该可以解决这个问题:
01
namespace
FloatTest
02
{
03
class
Program
04
{
05
static
void
Main(
string
[] args)
06
{
07
double
a = 0.0001;
08
double
b = 0.1;
09
10
int
c = (
int
)((a * 1000) / b);
11
12
Console.WriteLine(
"a = {0}"
, a);
13
Console.WriteLine(
"b = {0}"
, Convert.ToDouble(b));
14
Console.WriteLine(
"c = {0}"
, c);
15
16
Console.ReadLine();
17
}
18
}
19
}
这次却是得到我们期望的结果:
a = 0.0001
b = 0.1
c = 1
因此,在程序中,我们应该尽量的避免浮点数类型转换导致的精度丢失。
我在GCC上做了同样的实验,结果不管哪种方式得到的结果都是正确的,我只能说可能是double Convert.ToDouble(float)的实现的原因导致的。
- C# float double精度损的的问题
- 关于float和double的精度问题
- float和double的精度问题
- 关于float, double的精度问题
- java中float,double的精度问题
- double和float的精度问题
- 关于float与double的精度问题
- float 和 double 的精度
- double,float精度问题
- double,float精度问题
- float double 精度问题
- 解决double和float精度不准的问题
- java解决double和float精度不准确的问题
- 如何处理浮点数(float, double)的精度问题
- 解决double和float精度不准的问题
- double、float数值运算出现精度问题的解决方式
- double 的精度问题
- Double的精度问题
- java
- Collections 二分法查找问题
- Flex运用Module模块化编程时遇到的若干问题
- MFC六大关键技术剖析之动态创建
- 10个重要的算法C语言实现源代码
- C# float double精度损的的问题
- 积极开展微博客舆论引导工作
- 在DOS里 输入什么命令 查看 已安装JDK 版本信息
- 我知道有一天我会忘记这里
- getline(iflie,data)判断文件结尾
- Hibernate hql 续
- 看起来不错的个人blog
- SVN-Source
- 欢迎来访