关于浮点型的有效数字和精度的
来源:互联网 发布:低维数据映射到高维 编辑:程序博客网 时间:2024/05/17 21:44
不是说float和double都是7位精度么?那为什么可以精确到小数点后更多的位数?默认的精度是6位,那7位精度是什么意思啊? 有效数字是从左边第一位不为0的数开始算么?float型是7位有效数字,那是不是输入更多的数字时它都只能显示7位呢?
==========================================================================================================
*****对于精度是6位或7位的问题,float型(4字节32位)精度确实是6位或7位,而double型(8字节64位)精度是15或16位. 你可以具体测试一下: float m_float = 123.45678 ; double m_double = 1234567890.1234567 ; cout << "m_float = " << m_float << endl ; cout << "m_double= " << m_double<< endl ; 结果是不是:m_float = 123.4568 ; // 有的机器估计是123.457 *****m_float = 1234567890.123457 ; /* 有的机器估计是1234567890.12346 */ *****对于“那是不是输入更多的数字时它都只能显示7位呢?”的说法,“显示”一词说得不恰当,你输入再多的数字,在进入float或double内存的四个字节后都将被截短. 你再调用这个float变量时它已经丢失了过量的精度,并不是什么显示问题. *****其实浮点型的输入值iFloat在存入内存前,由硬件做了一个系列操作. 首先计算出唯一的n值,使得 2^n <= iFloat <= 2^(n+1). 然后用iFloat除于2^n得到一个大于1小于2的小数decimal. 对于float型,用其中的最高位存正负号,次高8bits存储n值,低23位存小数decimal. 低23位权值分别为:0.5、0.25、0.125...2^e, 其中e= -1,-2,-3...-23. 而2^(-23)决定了小数部分decimal的精度有限. *****反过来,从内存读取float,硬件也做对应的一个系列操作. 读取最高位表示正负号,读取次高8位并计算出结果E然后继续作为2的指数算出一个整数Z(2^E),小数部分按位加权得到一个大于0小于1的数D,用小数D乘于Z. 最后输出结果.
0 0
- 关于浮点型的有效数字和精度的
- 关于浮点数的的表数精度和有效位数:
- 浮点数(单精度、双精度数)的有效位
- javascript 中浮点型数字的运算精度
- javascript 中浮点型数字的运算精度
- javascript中浮点型数字的运算精度
- C++中32位单精度浮点数能表示的十进制有效数字是多少位?()
- 关于16进制字符串转为单精度浮点数和双精度浮点数的运算(一)
- 关于16进制字符串转为单精度浮点数和双精度浮点数的运算(二)
- 浮点数的精度和转换
- 浮点数的精度和转换(转)
- 浮点数float和double的精度
- 浮点数的表示和精度
- 浮点数的表示和精度
- 浮点数的表示和精度
- 浮点数据的精度计算和验证
- 浮点数的范围和精度
- javascript(js)浮点数字精度问题的一个解决办法。
- 28 个 Unix/Linux 的命令行神器
- 用MySQL创建数据库和数据库表
- printf的格式控制的完整格式
- 学习c++必看的书籍
- python开发环境搭建
- 关于浮点型的有效数字和精度的
- G++ 中文使用教程
- 字符串字面值、C风格字符串、C++风格字符串
- linux下python开发环境之一——安装python
- c++ 的异常类使用及关系
- C++中的fstream、ifstream 、ofstream
- c++ seekp() seekg()
- c++ tellg() tellp()
- C++类模板详解