首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

关于float门类

2013-10-29 
关于float类型一般float类型占用四个字节现在有一种float16类型,占用两个字节,那么这样的存储类型最多能表

关于float类型
一般float类型占用四个字节
现在有一种float16类型,占用两个字节,
那么这样的存储类型最多能表示小数点后几位呢?
比如现在内存中有这样两个字节,表示一个float16类型的数据为:C5 3F
转化成float类型后是多少呢?
现在又这样两个数据,1.54287和1.34039,如果按照float16类型来存,存到文件中之后发现变成了1.545312和1.342187,怎么样能不损失精度呢?(除了不扩大倍数之后再存)。
在线等了解的老师解答!!!

[解决办法]
参考http://en.wikipedia.org/wiki/Half-precision_floating-point_format

引用:
一般float类型占用四个字节
现在有一种float16类型,占用两个字节,
那么这样的存储类型最多能表示小数点后几位呢?
比如现在内存中有这样两个字节,表示一个float16类型的数据为:C5 3F
转化成float类型后是多少呢?
现在又这样两个数据,1.54287和1.34039,如果按照float16类型来存,存到文件中之后发现变成了1.545312和1.342187,怎么样能不损失精度呢?(除了不扩大倍数之后再存)。
在线等了解的老师解答!!!

[解决办法]
如果没有更多的信息,可以写程序验证,


lz 也可以参阅 深入理解计算机系统
[解决办法]
引用:
现在又这样两个数据,1.54287和1.34039,如果按照float16类型来存,存到文件中之后发现变成了1.545312和1.342187,怎么样能不损失精度呢?(除了不扩大倍数之后再存)。
在线等了解的老师解答!!!


浮点数都有误差。 
[解决办法]
可以用指数和尾数来表示:
1.54287 可以表示为154287* e-5,所保存(154287,5)就可以避免序列化和反序列化过程中的误差。 
不过浮点数过程中的误差是避免不了的。 
[解决办法]
用10进制小数不能精确表示某些三进制小数0.1(3)=0.33333333333……(10)
同理,用二进制小数也不能精确表示某些10进制小数。

热点排行