我都没注意计算器用的是定点数,给题主一个赞。

这个问题简单来说这就是浮点数和定点数的区别。

浮点数

优点:能够用统一的方法,表示范围变化非常大的数字,以float标准来说,32个bit就可以表示从10的负100多次方到10的正100多次方这么大范围。

缺点:浮点误差问题,无法精确表示某些小数。特性类似科学计数法,只能表示“有限个有效数字”。

不知是优点还是缺点:现代CPU集成了FPU,FPU是专门给浮点运算加速的协处理器。因为有了它,现代CPU计算浮点数是非常快的。

定点数

优点:能精确表示取值范围内的任意数字。

缺点,占用同样bit数时表示的范围很小。

浮点数肯定是主流,但是它使用时有一些注意事项,而且在某些场景下也会被特意换成定点数。

举例一:初学者都要学习判断两个小数是否相等的方法,但是有时候会忘记:

// a和b都是float类型,判断二者是否相等用

if ( Abs(a-b) < EPSILON )

{

......

}

// 其中EPSILON是一个很小的数,根据不同场景取0.000001或0.0001等

举例二:除了以上最基本的用法,浮点数在图像缩放等情景下也存在取整精度问题。之前认识一位大牛想改进UI缩放的效果,将浮点数全部改成了自定义的32位定点数,16位表示整数,16位表示小数。再配合改进过的算法,缩放误差问题迎刃而解。

举例三:由于王者农药的流行,现在“帧同步算法”在实时网络游戏中也倍受关注。帧同步算法要求输入一致时输出严格一致,飘忽不定的浮点数在这种场景下不受欢迎。所以也会用到定点数,确保运算时没有误差。

具体使用时,如果需要用定点数,既可以使用第三方的定点数程序库,也可以自己封装一个适合某个特定软件的定点数类型。

比如C#提供的Decimal可以提供和计算器一样的精确表示,python定点数的库名字也叫decimal

java 小数运算 少0.1_计算器是如何实现0.1的?相关推荐

  1. java小数是怎么运算的_JAVA中小数的运算

    虽然几乎每种处理器和编程语言都支持浮点运算,但大多数程序员很少注意它.这容易理解 ― 我们中大多数很少需要使用非整数类型.除了科学计算和偶尔的计时测试或基准测试程序,其它情况下几乎都用不着它.同样,大 ...

  2. 计算器程序java开方运算_模拟计算器java程序

    1 /*实现基本数学运算.函数等功能:加.减.乘.除.阶乘.正弦.余弦和指数运算.2 界面将模拟Windows中的计算器程序.*/ 3 import javax.swing.*;4 import ja ...

  3. java中3 0.1_为什么java里面3*0.1=0.30000000000000004,而4*0.1=0.4?-Go语言中文社区

    作者:蓝色 链接:https://www.zhihu.com/question/56545018/answer/149620518 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转载 ...

  4. (JAVA)超大小数运算

    package com.book.lite;import java.math.BigDecimal;/*** @author zhangyu* @date 2021年08月21日 4:56* 双精度大 ...

  5. 请编写一个个人所税计算器,用户输入应发工资薪金所得、五险一金金额和个税免征额,输出应缴税款和实发工资,结果保留小数点后两位。当输入数字小于0或等于0时,输出“error”。‪

    题目 假设个人所得税税率表如下:‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬ ...

  6. java 除法运算如何保留小数

    最近在计算金额的过程中,发现了一个问题: 24/60 竟然得到的结果是0!!! Java的运算,由被运算的最高数据类型决定. 所以,整数的默认强制类型就是int, int / int 结果就是 int ...

  7. java小数计算器,java计算器.

    Java codepublic class Arith { //默认除法运算精度 private static final int DEF_DIV_SCALE = 10; //构造器私有,让这个类不能 ...

  8. 利用java swing编写一个简易的计算器,实现了括号,优先级,三角函数,阶乘等功能

    利用java swing编写一个简易的计算器 背景 效果图 一.默认图 二.计算三角函数 三.阶乘运算 四.常见的四则运算(实现了优先级) 代码 本文借鉴了"初识Java,实现简易计算器(带 ...

  9. 基于Java语言的Android实现手机计算器

    编写安卓手机计算器 提示:本章代码都是经过红米note10pro的测试,解决了大部分bug,一些特殊情况的处理方式也是仿照本机的系统计算器处理方式,如有bug或什么疑惑的地方请大家留言! 提示:完整代 ...

最新文章

  1. .NET全栈开发工程师学习路径
  2. 多线程池、饱和策略详解
  3. Android之怎么隐藏EditText光标和自动显示键盘
  4. Java使用者的延期执行
  5. 交换机的RJ45端口和SFP端口有什么区别?
  6. spring— Bean标签scope配置和生命周期配置
  7. Codeblocks和gdb调试 (转)
  8. Intellij插件之JRebel
  9. 系统学习机器学习之神经网络(四) --SOM
  10. jQuery事件命名空间多事件绑定自定义事件js 命名空间 javascript命名空间
  11. CA认证技术的研究与设计
  12. 使用PS制作放大镜效果
  13. PLINK-GWAS学习6------数据质控之杂合率质控
  14. 【C进阶】之动态内存分配及内存操作函数
  15. Three.js 基础之灯光
  16. Catching Both Gray and Black Swans: Open-set Supervised Anomaly Detection
  17. 七日杀服务器无限刷空投,七日杀空投作弊代码 | 手游网游页游攻略大全
  18. linux 黑屏后死机,如何修复各种各样的黑屏死机
  19. Proteus 8.1 51单片机仿真双人对战五子棋
  20. 家乐福在西班牙布局区块链,上线食品溯源平台

热门文章

  1. wxWidgets:wxMemoryFSHandler类用法
  2. boost::variant2模块转换构造抛出相关的测试程序
  3. boost::owner_hash相关的测试程序
  4. boost::graph模块实现bellman的测试程序
  5. boost::put_get_helper用法的测试程序
  6. boost::geometry::clear用法的测试程序
  7. boost:验证Boost概念检查的class_requires 库应该在预期的时间内捕获错误
  8. VTK:可视化算法之Hello
  9. VTK:图片之MarkKeypoints
  10. OpenCV在水平线上校准3个摄像机的实例(附完整源代码)