对于浮点型数据运算精度丢失问题

 对于浮点型数据运算精度丢失问题:
产生原因:
    计算机并不能识别除了二进制数据以外的任何数据,无论我们使用何种编程语言,在何种编译环境下工作,都要先 把源程序翻译成二进制的机器码后才能被计算机识别。
    而在存储浮点型数据时,会分为三部分进行存储:
        符号位(Sign) : 0代表正,1代表为负
        指数位(Exponent):用于存储科学计数法中的指数数据,并且采用移位存储
        尾数部分(Mantissa):尾数部分
            其中前两位分别为实数符号位和指数符号位,于是存储结构实际为如下:

 

                    31                  30            29----23        22----0         

               实数符号位    指数符号位    指数位      有效数位

           但是,在将十进制浮点数转换为二进制浮点数时,小数的二进制有时也是不可能精确的,就如同十进制不能准确表示1/3,二进制也无法准确表示1/10,而double类型存储尾数部分最多只能存储52位,于是,计算机在存储该浮点型数据时,便出现了精度丢失(1)。例如,11.9的内存存储大约为:1011. 1110011001100110011001100...

            而在进行浮点类数据计算的时候,浮点参与计算,会左移或右移n位,直到小数点移动到第一个有效数字的右边。于是11.9在转化为二进制后 小数点左移3位,就得到1. 011 11100110011001100110(精度丢失2)

            于是最终浮点型运算出现了精度丢失误差。

测试方法:

            建议测试人员在涉及浮点型数据的运算时(如金额),减法运算建议输入被减数2.4,减数2.0。此时结果
                       
            当为加法运算时,建议输入加数分别为0.1+0.2。此时运算结果:
           
            当乘法运算时,建议输入0.2*0.1,此时结果:
    

             

            当除法运算时,建议0.3/0.1,此时结果:
  

 

  
posted @   XuepengZ  阅读(5064)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示