double的精度????

问题描述

double的精度????

public class yuan {

 static double  C(double r){
 return 3.14*r*r;

}

public static void main(String[] args) {

double a=3.14;
for(int i=1;i<30;i++){
System.out.println(i);
System.out.println(C(i));
System.out.println(a*i*i);
}
}

}
输出结果是1
3.14
3.14
2
12.56
12.56
3
28.259999999999998
28.259999999999998
4
50.24
50.24
5
78.5
78.5
6
113.03999999999999
113.03999999999999
7
153.86
153.86
8
200.96
200.96
9
254.34
254.34
10
314.0
314.0
11
379.94
379.94
12
452.15999999999997
452.15999999999997
13
530.66
530.66
14
615.44
615.44
15
706.5
706.5
16
803.84
803.84
17
907.46
907.46
18
1017.36
1017.36
19
1133.54
1133.54
20
1256.0
1256.0
21
1384.74
1384.74
22
1519.76
1519.76
23
1661.06
1661.06
24
1808.6399999999999
1808.6399999999999
25
1962.5
1962.5
26
2122.64
2122.64
27
2289.06
2289.06
28
2461.76
2461.76
29
2640.7400000000002
2640.7400000000002
请教大神们 为什么只有在 3 6 12 24 29 时候精度如此不同 小数点后面为什么这么多位???
谢谢

解决方案

要明白一点,浮点数在计算机内是用二进制表示的,而不是所有的10进制数都可以精确转换成二进制,所以某些情况下,会有转换误差。
反过来,浮点数存在一个有效精度的问题,不能简单理解为转换为10进制以后有多少小数位就是它的精度,这是两个概念。

解决方案二:

原理在这里有介绍
http://blog.csdn.net/strollerV/article/details/1621382

但没有必要细究,没必要

解决方案三:

double是双精度:2^52=4503599627370496,一共16位所以double的精度为16,double数据占64bit,double的指数范围是-1023-1024

时间: 2024-08-17 20:27:41

double的精度????的相关文章

java-我懂!是进制的问题导致Java的double型运算结果显示有精度问题,但是!!

问题描述 我懂!是进制的问题导致Java的double型运算结果显示有精度问题,但是!! 20C 但是,做笔试的时候,遇到这样一道题:下列表达式中,可以得到精确结果的是哪些?A.double d1 = 3.0-2.6:B.double d2 = 2.5*1.5:C.double d3 = 3.0-2.5:D.double d4 = 1.0-0.6:E.double d5 = 4.015*100:F.double d6 = 4.015*10: 实在是遇到这样的挫科的题目,我临场时该怎么解噜?!总不

.Net 的数学库计算精度太差??

问题描述 在程序中要计算一个很小的数的指数,即Math.Exp(x)其中x非常小.结果发现居然计算出来的结果是错的.用vc2010验证了一下,也是错的.在vc6下面计算,得到了正确的结果.怎么微软的库的精度越来越差?有兴趣的同学可以自己试一下.我要实际计算的公式是(1-Math.Exp(0-x))/x,在x趋于0的时候,这个公式的结果应该趋于1,但是始终应该小于1,我在C#里面计算,居然出现了大于1的情况,所以开始检查,最终发现是Math.Exp计算结果精度太差,比windows自己带的计算器还

java中浮点数的比较(double, float)(转)

  问题的提出:如果我们编译运行下面这个程序会看到什么? public static void main(String args[]){ System.out.println(0.05+0.01); System.out.println(1.0-0.42); System.out.println(4.015*100); System.out.println("BigDecimal:"+new BigDecimal(Double.toString(4.015)).multiply(new

C#中float的取值范围和精度

原文:C#中float的取值范围和精度 float类型的表现形式: 默认情况下,赋值运算符右侧的实数被视为 double. 因此,应使用后缀 f 或 F 初始化浮点型变量,如以下示例中所示: float x = 3.5F; 如果在以上声明中不使用后缀,则会因为您尝试将一个 double值存储到 float 变量中而发生编译错误. float的取值范围  float占用4个字节,和int是一样,也就是32bit. 1bit(符号位) 8bits(指数位) 23bits(尾数位) 存储方式如下图:

C#数据类型中的decimal与double的区别

decimal类型 作为补充,decimal类型用来表示高精度的浮点数    Name   CTS Type   De script ion   Significant Figures   Range (approximate)   decimal   System.Decimal   128-bit high precision decimal notation   28   ±1.0 × 10?28 to ±7.9 × 1028   从上表可以看出,decimal的有效位数很大,达到了28位

VB編程規約

VB編程規約 jugnlesong 1. 對象命名規約 對象種類 對象名稱 對象前綴 例 FORM 窗體 frm frmMain MDI 子窗體 子窗體 mdi mdiNote PICTURE BOX 圖片控件 pic picView LABEL 標籤控件 lbl lblMessage TEXT BOX 文本控件 txt txtPassword FRAME 框架控件 fra fraOption COMMAND BUTTON 命令控件 cmd cmdClose CHECK BUTTON 復選框 c

UVa 113 / POJ 2109 Power of Cryptography

使用double处理大整数&泰勒公式与误差分析 113 - Power of Cryptography Time limit: 3.000 seconds http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=99&page=show_problem&problem=49 http://poj.org/problem?id=2109 Background Curre

C++入门之浮点数的数据类型

浮点数的数据类型有3种,它们是: ● float:单精度浮点数 ● double:双精度浮点数 ● long double:扩展精度浮点数 这里的术语"精度"是指尾数中的位数.上述数据类型的精度按从上到下的顺序逐步增加,float在尾数中的位数最少,long double的位数最多.注意精度只确定尾数中的位数.某一类型表示的数值的取值范围主要由指数的可能范围确定. C++的ANSI标准并没有描述精度和数值范围,所以这些类型的精度和数值范围就由编译器决定,编译器通常会最大限度地利用计算机

printf-求最高位数字,为什么当超过9位数结果就不对了?( 如图最后一次的结果不对)

问题描述 求最高位数字,为什么当超过9位数结果就不对了?( 如图最后一次的结果不对) long i*p;p=&i;printf(""请输入一个数:"");while(scanf(""%ld""p)!=EOF){ while(*p>=10) *p=*p/10; printf(""最高为数字是:%ldn""*p); }如何改才能输入任何位数的数字? 解决方案 不考虑精度可以用d