[code]double a=10/3.0; printf("%.60f",a);[/code] 结果是3.333333333333333481363069950020872056484222412109375 3后面的无效数字是怎么得来的? [ 本帖最后由 meiyuhan 于 2007-12-17 22:41 编辑 ]
[code][root@Mylinux tmp]# echo "0.12345678" | awk '{print $0+0}' 0.123457 [root@Mylinux tmp]# echo "0.12345678" | awk '{printf "%f\n",$0+0}' 0.123457 [root@Mylinux tmp]# echo "0.12345678" | awk '{printf "%.9f\n",$0+0}' 0.123456780[/code] 因数据处理,需要对两份文件的某字段进行数值比对,且都需要先+0转换成数值类型,但发现awk的默认浮点数输出只到小数点后8位,这样就会丢失小数点后8位后的数值。...
以下代码在第七次执行的时候就出错. 两个宏: #define tpra(a) ((a)*0.01 - 40) #define humd(b) (0.0405*(b) - 2.8*(b)*(b)*0.000001 - 4) for(i = 0; i < 8; i++) { bzero(tmps, 10); sprintf(tmps, "%02x%02x", *(ptr + 2 * i + 1), *(ptr + 2 * (i + 1))); sscanf(tmps, "%x", &tmpv); i < 4 ? (tmpf = tpra(tmpv)) : (tmpf = humd(tmpv)); /*i = ...
小数点的表示 为了节省内存,计算机中数值型数据的小数点的位置是隐含的,且小数点的位置既可以是固定的,也可以是变化的。 定点数与浮点数 如果小数点的位置事先已有约定,不再改变,此类数称为“定点数”。相比之下,如果小数点的位置可变,则称为“浮点数”。 ⑴ 定点数。常用的定点数有两种表示形式:如果小数点位置约定在最低数值位的后面,则该数只能是定点整数;如果小数点位置约定在最高数值位的前面,则...
所有的C/C++编译器都是按照IEEE(国际电子电器工程师协会)制定的IEEE 浮点数表示法来进行运算的。这种结构是一种科学表示法,用符号(正或负)、指数和尾数来表示,底数被确定为2,也就是说是把一个浮点数表示为尾数乘以2的指数次方再加上符号。下面来看一下具体的规格: 符号位 指数位 小数部分 指数偏移量 单精度浮点数 1 位[31] 8位 [30-23] 23位 [22-00] 127 双精度浮点数 1 位[63] 11 位[62-52] 52 位[51-00] 1023 我们以...
%c的参数可以支持char、short、int几种不同长度的类型,我理解为对这些参数都扩展为32位的数,可以兼容。 但是%f这个参数,好像也兼容float和double两种类型,但是我印象中浮点数是有内部格式的,而且单和双精度的不一样,那么printf如何区别这两种格式呢? 见后面几位大师的回帖: float扩展为double入栈。 已解决 [ 本帖最后由 wuxb45 于 2009-8-5 16:42 编辑 ]
java的浮点数管理是分成 float,double两套进行的。 其中float是32位的,double是64位的,那么具体的存储方式是怎么样的呢? 按JAVA的语言规范,是下面这种方式的。 有限值可以用下面的公式来表示 s · m · 2 (e-N+1) 其中S是,+1,-1 m是正整数小于2N 而e是个整数,值域是Emin = -(2K-1-2) 到 Emax = 2K-1-1 而N与K的值呢,是取决于具体的实现的。 而对于有些实现对应的有些数值,这个s,m,e是可以取不同的值的。 如m是偶...
float base; base = 0.12345; double result = 0; result = base*60*10000000; printf("result = %f\n"); 为何结果是74070002.138615呢?我想得到精确的数值该怎么做? windows的计算器怎么可以达到精确的数值呢?