在午休,我们开始辩论有关的精密double
值类型。
我的同事认为,它始终拥有小数点后15位。
在我看来一个也说不上来,因为IEEE 754不会使这个假设,它取决于其中第一个1
是在二进制表示。 (即数字的小数点计数之前的大小,太)
如何才能使一个更合格的声明?
在午休,我们开始辩论有关的精密double
值类型。
我的同事认为,它始终拥有小数点后15位。
在我看来一个也说不上来,因为IEEE 754不会使这个假设,它取决于其中第一个1
是在二进制表示。 (即数字的小数点计数之前的大小,太)
如何才能使一个更合格的声明?
正如所陈述的C#参考 ,精度为从之前或小数点后15到16位,(取决于所表示的十进制值)。
总之,你是对的,之前和小数点后取决于值 。
例如:
12345678.1234567D
//接下来的位右移将得到围捕 1234567.12345678D
//接下来的位右移将得到围捕 :在全样本http://ideone.com/eXvz3
另外,试着换位思考一下double
值作为固定的十进制值是不是一个好主意。
你都错了。 一个正常double
具有精度53 位 。 这大约相当于16位十进制数字,但思维double
,好像他们是小数值没有导致混乱的结束,最好避免使用。
这就是说,你是更接近比你的同事纠正 - 精度相对值所代表; 足够大的double
■找的精度没有小数位数。
例如,下一个双大于4503599627370496.0
是4503599627370497.0
。
C#双打根据IEEE 754具有53位的有效P(或尾数)和一个11位指数e,其具有-1022和1023之间的范围表示,因此它们的值是
p * 2^e
有效数始终具有小数点之前的一个数字,所以它的小数部分的精度被固定。 在另一方面的数字在双小数点后的数字还取决于其指数; 其数量超过指数在尾数的小数部分的位数没有小数部分本身。
什么每台计算机科学家应该知道关于浮点运算可能是在这个问题上最广泛认可的出版物。