浮点数表示和需要注意的问题

// 本文不完全是原创,只是整合了一些知识和观点和自己的测试代码,对与错仅供参考。

  计算空间几何变换和动画中经常使用的浮点数宏符号的含义:

float fSValue = 1.0e-07;//等于1.0e-07,1.00e-07,1e-7,等价于1.0 * 10^-7

   float fValue = -1.0e-7;// -1.0e-7等价于-1.0 * 10 ^-7

    const double EPSILON = 1.00e-07;
    const float   FLT_EPSILON  = 1.192092896e-07F;

    const double  DBL_EPSILON = 2.2204460492503131e-016;



// 计算机底层数字转换:

    //1.10进制转换为n进制,正数除以进制,倒转取余(通过16进制和2进制转换更方便);小数乘以进制数,顺序取整。
    //2.N进制数转换为10进制数,Ax(2^1) + Bx(2 ^0) + Cx(2^-1)数列形式表示,无论正数负数都一样。
    //3.浮点数表示:符号位,指数位(0-127表示负数,(127-256)表示正数),尾数(去掉前面一位)。
    //4.大于1Byte的数字和非数值类型,都要进行小端模式排序存放(对于一个单位结构转换后才能得到正确的值)。
// 整数是直接转换为16进制表示(存储转换为小端模式存储),浮点数需要按照转换公式和特殊公式处理(存储转换为小端模式存储),
// 非数值数据,例如ASCII字符,Unicode会转换为相应的字节代码,或者双字节代码来代替;二进制非数值数据存储, 都可以转换为ASCII,UTF-8表示,
// 会索引到文字的图形贴图或者计算的像素。汉字Ascii为负数,那是解析错误,因为汉字有自己的编码,但是存储和显示出来都是对的。
// 图形数据,颜色像素数据,可以用unsigned int表示,32位,每字节表示一个颜色值,将图形数据提交到显卡,显卡会映射为对应的颜色值。

// 1.浮点数的表示
//小数的处理:  
//0.4=0.5*0+0.25*1+0.125*1+0.0625*0+……  
//实际上这永远算不完!这就是著名的浮点数精度问题。

  //1)浮点数表示为十六进制数
// 公式:将浮点数化为:Sx(2^E)xF 后转换为:(-1)Sx(2^(E + 127))x(F - 1),得到S+(E+127)+(F-1)的二进制数,也就是十六进制数。
// 浮点数表示格式:float:符号位(1) 指数位(8) 尾数位(23); double:也是类似的方式,只是位数不同。
// 对于64位的浮点数,最高的1位是符号位S,接着的11位是指数E,剩下的52位为有效数字F。


// 符号位为0则是正数,1则是负数。
//指数位需有负数不用[-128,127]而用[0,255]表示,负数在[0,127],正数在[128,255]
//尾数的前面都是1.1000,因为没有0.11000,故前面可以省略1

// 特殊情况公式转变(表示正负0或者比2^(-127)更小的小数):当用上面的的公式转换后发现:二进制科学计数法得到真实的 E <= -127,那么转换为十六进制时取0x00; F变为0.xxx形式,首位为0舍去,
// 后面的位数为xxx,符号位还是S.

 
/*转换函数
  string DigitalData::TestFloat(float fData)
  {
  unsigned char *pData = (unsigned char*)&fData;
  char szBuffer[32];
  //再转化为16进制为:47 F1 20 00,最后把它翻过来,就成了:00 20 F1 47。
  unsigned char Tail = *(pData);
  unsigned char Tail2 = *(pData + 1);
  unsigned char Exp = *(pData + 2);
  unsigned char Head = *(pData + 3);
  sprintf_s(szBuffer, "%02x%02x%02x%02x", Head, Exp,Tail2, Tail);
  //printf(szBuffer);
  return string(szBuffer);
  }
  */ <
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值