精度

相比 floatdouble 从其名字上已经展示出,它的精度是前者的两倍,他们的精度分别为:

  • float: 7 位数字
  • double: 15 位数字

可通过如下的示例看出,在重复进行计算时,精度差异开始显现:

float a = 1.f / 81;
float b = 0;
for (int i = 0; i < 729; ++ i)
b += a;
printf("%.7g\n", b); // prints 9.000023
double a = 1.0 / 81;
double b = 0;
for (int i = 0; i < 729; ++ i)
b += a;
printf("%.15g\n", b); // prints 8.99999999999996

尽管如此,double 也不是十分精确,所以还有 long double 类型,该类型下上面的结果为 9.000000000000000066。所有浮点型都面临精度丢失的问题,所以处理高精度的场景,比如涉及金钱,最好用 int 或单独的分数类(fraction class)。

上限

两者上限不同,

  • float: 3e38
  • double: 1.7e308

所以使用 float 出现瓶颈的概率会比 double 大些,特别是计算阶乘这种情况下。

选择

而关于两者的选择,《C++ Primer》 是这样描述的:

“Use double for floating-point computations; float usually does not have enough precision, and the cost of double-precision calculations versus single-precision is negligible. In fact, on some machines, double-precision operations are faster than single. The precision offered by long double usually is unnecessary and often entails considerable run-time cost.”

--Stanley B. Lippman. “C++ Primer, Fifth Edition (Jason Arnold's Library).”

鉴于 float 精度不够,对于有小数的情况建议使用 double。但考虑到性能, long double 性价比就不高了。

相关资源

最新文章

  1. github.com使用方法
  2. StringBuilder类与String类的区别
  3. RecyclerView解析--onViewDetachedFromWindow()/onViewAttachedToWindow()
  4. 【摘自网络】陈奕迅&amp;&amp;杨千嬅
  5. 锋利的JQuery(三)
  6. Git-Flow
  7. 【iOS开发之OC和JS互调】
  8. android详细信息java.util.ConcurrentModificationException变态
  9. 用border或者div制作三角形等图形
  10. 【tyvj P4868】天天和不可描述
  11. JS检测浏览器是否最大化
  12. js 运动框架及实例
  13. RN Animated透明度动画
  14. Oracle_高级功能(7) 数据字典视图和动态性能视图
  15. POJ2230 Watchcow
  16. SSH无密码登录:只需两个简单步骤 (Linux)
  17. linux rz上传文件及出错解决方案
  18. stm32f407启动文件分析
  19. 嵌入式开发之davinci--- 8148/8168/8127 中的图像采集格式Sensor信号输出YUV、RGB、RAW DATA、JPEG 4种方式区别
  20. 洛谷P3254 圆桌问题(最大流)

热门文章

  1. DataTable和DataReader的遍历
  2. SpringBoot微服务电商项目开发实战 --- 分布式文件系统实现
  3. Winform项目常用配置方法
  4. oracle性能优化(项目中的一个sql优化的简单记录)
  5. 常用的数据压缩lib
  6. mariadb 学习笔记
  7. ASP.NET Core on K8S深入学习(11)K8S网络知多少
  8. SpringCloud 亿级流量 架构演进
  9. IT兄弟连 HTML5教程 CSS3属性特效 小结及习题
  10. 激光炸弹 HYSBZ - 1218