百科问答小站 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口耳机,然而现实就是无线耳机开始普及。

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

--

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




  

相关话题

  计算机科学与技术是什么专业是不是很杂很广泛很难学精? 
  UML 还有用吗? 
  教材上说铁路订票系统是实时操作系统,可是服务器的Linux不是分时操作系统吗? 
  为何一个byte有8bit而不是7/9/4/16bit ? 
  该如何正确看待c中的字符串常量? 
  用JavaScript做其他语言擅长的事情“好”么? 
  全员编程的时代,我是不是应该放弃这条路? 
  有哪些比较好的元学习(meta learning)领域的学习资源? 
  编程那么难,为什么不弄一个大众一学就会的计算机语言呢? 
  Java 中的多态是不是违背了里氏替换原则? 

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





© 2025-04-02 - tinynew.org. All Rights Reserved.
© 2025-04-02 - tinynew.org. 保留所有权利