百科问答小站 logo
百科问答小站 font logo



float类型的设计是否存在问题? 第1页

  

user avatar   haozhi-yang-41 网友的相关建议: 
      

这问题是个好问题,虽然无解——因为这已经是最优解了………

造成这个问题的原因主要是:提高精度对bit的占用太厉害了

例如说float,一共才32bit,就已经拿了23bit出来表示精度了,只可惜2^23只有7位10进制精度。

好,按照题主要求,我们增加一位10进制精度,那我们就需要27bit(2^27=134217728,刚好覆盖完8位10进制)。但这多出来的4bit从哪来?只能是指数部分了吧?指数少了4bit,覆盖范围就由现在的2^(2^7)=2^128=10^38,急剧缩减为2^(2^3)=2^8=256。如果你到这还看不懂的话,那我再提醒你:而浮点数规定小数点左边只能补一个1,也就是说,这时按照你的“新式float标准”,连个1000都表达不出来……

总而言之,你太小看了指数的增长速度了。尤其在浮点数的设计里,范围的变动影响还是2阶指数的。所以虽然你看着不起眼,但只要你随便拿走几个bit,原来看着近乎天文数字的表示范围,一下子就沦落到连买部手机的价钱都表示不出来了。

最多最多,就稍微微调一下,多拿一个bit给数值,让float可以完整的表示7位10进制精度:2^23=8388608,而2^24=16777216,这也许会用着爽一些。至于范围嘛,虽然开了个方,但好歹还是有10^19的范围,起码亿亿级别的数字还是够用的。


最后我想吐槽一下,是谁加上“c++”这个标签的?

虽然float确实是c/c++的类型,但c/c++的编译器无非是用浮点指令去操作它而已,实际精度和范围展示本质上是cpu/gpu决定的。

至于cpu和ieee754之间,当初是谁先这么定的,到底是鸡生蛋还是蛋生鸡,那就看谁有功夫去考究一把了。


user avatar   sheng-xun-69 网友的相关建议: 
      
“大坐标对象时产生的抖动问题”?

坐标多大?

如果用float记录一座城市,单位用“米”,城市半径算5000米的话,外围区域误差多少?

5000=2的12次方,23位float尾数乘上12次方,那小数点后面也能剩下11位

误差范围大概是“1/2000”米,也就是0.5“mm”,怎么就不够用了?


“Z-fighting”?

这能怪float吗?

你把顶点数据换成double,z-fighting照样发生

这个问题根本就不是float造成的,而是z-buffer位宽只有24bit造成的


那么,“z-buffer位宽为什么只有24bit”呢?

别问我

问nVidia黄仁勋先生

问AMD桑德斯先生和现任CEO苏姿丰女士

GPU是他们设计的


user avatar   Ivony 网友的相关建议: 
      

我觉得是你压根儿没搞明白啥叫作浮点数,你要精度高直接用整型不就行了么?全精度的……


user avatar   pansz 网友的相关建议: 
      

不需要,我已经几乎两年没用过有线充电了。

把常用场合都部署好无线充电以后,真的不用操心换手机换充电器之类的事情。

其实很简单的一个问题:取消耳机口之后,各位是改用L口耳机C口耳机,还是改用无线耳机?我曾经以为会普及L口或者C口耳机,然而现实就是无线耳机开始普及。

无线充电座普及之后,由于它没有插拔,所以她的寿命其实远比手机要长。

--

所以,如果你没有无线充,强烈建议你尝试无线充。




  

相关话题

  GB2312及其扩展标准和Unicode之间有什么区别和优劣势? 
  编程真的能改变人的思维方式吗? 
  C#程序如何调用Python程序? 
  灭霸使用了什么样的随机数生成方法来保证公平? 
  你认为程序员的最高境界是什么? 
  为什么许多人建议本科学数学,研究生阶段转金融或者计算机?学数学的发展方向只有纯数学计算机以及金融吗? 
  如何开始学习 Rust 语言? 
  如何正确通过 C++ Primer 学习 C++? 
  如何评价单片机大神郭天祥? 
  宅总用的这是什么编辑器? 

前一个讨论
湖畔大学首次公开办学情况,5 年只录取了 254 个学生,如何看待这一办学模式?具有怎样的社会意义?
下一个讨论
程序员该选择Macbook Pro吗?





© 2024-11-21 - tinynew.org. All Rights Reserved.
© 2024-11-21 - tinynew.org. 保留所有权利