Browse > Home / 项目管理 / 浮点型数据编程和数据库的计算误差

浮点型数据编程和数据库的计算误差

2010-01-12 11:13:55   by : BossAdmin   views:333
Leave a Comment

C#
//double   是   浮点型数据,其实它并不是保存精确的值,而只是一个近似值,所以才叫做双精度浮点型,不过是精度更高,但不是100%,所以它的有偏差是毫无疑问的,不过值很小而已。。  
  double   d = 0.0;  
  for   (int   i=0   ;   i   <   40;   i++)  
  {  
  d += 2.2;  
  Console.WriteLine("Result   =   {0}",d);  
  }  
   
   
  Result   =   2.2  
  Result   =   4.4  
  Result   =   6.6  
  Result   =   8.8  
  Result   =   11  
  Result   =   13.2  
  Result   =   15.4  
  Result   =   17.6  
  Result   =   19.8  
  Result   =   22  
  Result   =   24.2  
  Result   =   26.4  
  Result   =   28.6  
  Result   =   30.8  
  Result   =   33  
  Result   =   35.2  
  Result   =   37.4  
  Result   =   39.6  
  Result   =   41.8  
  Result   =   44  
  Result   =   46.2  
  Result   =   48.4  
  Result   =   50.6  
  Result   =   52.8  
  Result   =   55  
  Result   =   57.2  
  Result   =   59.4  
  Result   =   61.6  
  Result   =   63.8  
  Result   =   66  
  Result   =   68.2  
  Result   =   70.4  
  Result   =   72.6  
  Result   =   74.8  
  Result   =   77  
  Result   =   79.2  
  Result   =   81.4  
  Result   =   83.6000000000001  
  Result   =   85.8000000000001  
  Result   =   88.0000000000001  
对比一下float的精度    
   
  float   f = 0.0f;  
  for   (int   i=0   ;   i   <   40;   i++)  
  {  
  f += 2.2f;  
  Console.WriteLine("Result   =   {0}",f);  
  }  
   
  Result   =   2.2  
  Result   =   4.4  
  Result   =   6.6  
  Result   =   8.8  
  Result   =   11  
  Result   =   13.2  
  Result   =   15.4  
  Result   =   17.6  
  Result   =   19.8  
  Result   =   22  
  Result   =   24.2  
  Result   =   26.4  
  Result   =   28.6  
  Result   =   30.8  
  Result   =   33  
  Result   =   35.2  
  Result   =   37.40001  
  Result   =   39.60001  
  Result   =   41.80001  
  Result   =   44.00001  
  Result   =   46.20001  
  Result   =   48.40001  
  Result   =   50.60001  
  Result   =   52.80001  
  Result   =   55.00001  
  Result   =   57.20001  
  Result   =   59.40001  
  Result   =   61.60001  
  Result   =   63.80001  
  Result   =   66.00002  
  Result   =   68.20001  
  Result   =   70.40001  
  Result   =   72.60001  
  Result   =   74.8  
  Result   =   77  
  Result   =   79.2  
  Result   =   81.39999  
  Result   =   83.59999  
  Result   =   85.79999  
  Result   =   87.99998
_________________________________

*MS-sql*
declare @test float;
declare @at_end int;
SET @test=2.2
set @at_end=0
WHILE @at_end < 41
  begin
   set @test=@test+2.2
   set @at_end=@at_end+1
   --print @test
   insert into test values(@test);
   --commit;

END
select * from test
———————————————————————
4.4
6.6
8.8
11
13.2
15.4
17.6
19.8
22
24.2
26.4
28.6
30.8
33
35.2
37.4
39.6
41.8
44
46.2
48.4
50.6
52.8
55
57.2
59.4
61.6
63.8
66
68.2
70.4
72.6
74.8
77
79.2
81.4
83.6000000000001
85.8000000000001
88.0000000000001
90.2000000000001
92.4000000000001
 ——————————————————————
*oracle*
declare
  test float;
  loopint int;
 
begin
  test:=2.2;
  loopint :=1;
  while loopint < 100 loop
   test:=test+2.2;
   dbms_output.put_line(test);
   loopint := loopint +1;
   insert into test_float values(test);
  end loop;
   commit;
end;

select * from test_float
——————————————————————————————————————————
1 4.4
2 6.6
3 8.8
4 11
5 13.2
6 15.4
7 17.6
8 19.8
9 22
10 24.2
11 26.4
12 28.6
13 30.8
14 33
15 35.2
16 37.4
17 39.6
18 41.8
19 44
20 46.2
21 48.4
22 50.6
23 52.8
24 55
25 57.2
26 59.4
27 61.6
28 63.8
29 66
30 68.2
31 70.4
32 72.6
33 74.8
34 77
35 79.2
36 81.4
37 83.6
38 85.8
39 88
40 90.2
41 92.4
42 94.6
43 96.8
44 99
45 101.2
46 103.4
47 105.6
48 107.8
49 110
50 112.2
51 114.4
52 116.6
53 118.8
54 121
55 123.2
56 125.4
57 127.6
58 129.8
59 132
60 134.2
61 136.4
62 138.6
63 140.8
64 143
65 145.2
66 147.4
67 149.6
68 151.8
69 154
70 156.2
71 158.4
72 160.6
73 162.8
74 165
75 167.2
76 169.4
77 171.6
78 173.8
79 176
80 178.2
81 180.4
82 182.6
83 184.8
84 187
85 189.2
86 191.4
87 193.6
88 195.8
89 198
90 200.2
91 202.4
92 204.6
93 206.8
94 209
95 211.2
96 213.4
97 215.6
98 217.8
99 220

Art_bot_ad
Categories: 项目管理