w00*_*977 3 .net vb.net floating-point
我不理解术语二进制浮点和十进制浮点.我知道浮点数(32位)和双打(64位)是二进制浮点数,十进制数(128位)是十进制浮点数.我理解十进制是基数10,二进制是基数2.但是,我不明白为什么小数是基数10,因为最终一切都是基数2?为什么小数位数为10,而不是基数为2的浮点数和双精度数?
我今天看过很多网站,例如:.NET中十进制,浮点数和双倍数之间的差异?
简短的回答:您可以代表"简单"的十进制数字,如0.1正好在十进制表示,但只有大约为二进制.
通常,人们使用"十进制"类型的原因是为了代表金钱,这通常包括大值和小分数(100分).十进制类型最适合跟踪这些类型的数字,并且不会产生舍入错误产生结果的风险,如10.09999999999999.
浮点数由符号(+或 - ),有效数和指数组成.有效数字由许多基数B数字组成.指数e的解释是该数字应乘以B e.选择B为2或10对小整数没有影响(0,1,2,...可以在二进制浮点和十进制浮点中完全表示)但是分数和非常大的数字可以用二进制和十进制表示的确不完全相同.
示例:二进制浮点可以精确地表示2 -100和2 100,但decimal 128不能.十进制浮点可以精确地表示0.1,但二进制浮点不能(以任何精度).
你是对的,最终一切都是二元的.许多方案用于将十进制浮点表示为位.有效数是编码的棘手部分.IEEE标准化委员会设计了两种方案,一种方便软件,另一种方便硬件解码.我不知道.NET使用什么.它可能使用类似于IEEE 754浮点标准中的"二进制整数有效位字段"技术,其中分配的位用于以二进制形式编码0到B n -1 之间的数字,因为这是有效的最好的软件.