计算机-浮点数运算的问题 (3.14+le20)-le20=0.00?

问题描述

浮点数运算的问题 (3.14+le20)-le20=0.00?

昨天老师上课《程序设计与计算机系统》中说道:(3.14+le20)-le20=0.00,而le20-le20+3.14=3.14,
对前答案的解释是:浮点数在运算时,会有一个对齐问题,这样在非常大的数和3.14相加时,会舍掉有效位,然后只剩le20了,听得不懂而且也没查到资料,所以到这里来求大神来了!先谢了!

解决方案

是的,浮点数有特殊的存储方式,你可以看一下关于浮点数的存储资料,或许能明白一些,维基中有

时间: 2024-11-01 01:14:22

计算机-浮点数运算的问题 (3.14+le20)-le20=0.00?的相关文章

php中浮点数运算常见问题

本文实例分析了php中让人头疼的浮点数运算.分享给大家供大家参考,具体如下: 在做电商的时候,计算价格是免不了的,然后发现了php的一个坑,口算应该正确的值,php运算出来会跟你不一样 请看下面的代码: $price=69.1; $count=100; $total=$price*$count-6910; echo $total; 你猜一下变量$total的值是多少,运行一下这个代码输出:-9.09494701773E-13 怎么解决这个问题呢? 使用round函数 代码修改成: $price=

Java中使用BigDecimal进行浮点数运算_java

最近研究了一下Java的浮点数计算问题,从网上查询了相关的资料,汇总并经过了一些整理和调试,最后完成此文,欢迎大家指出其中的错误和问题. 在Java中,float声明的变量是单精度浮点数,double声明的变量是双精度浮点数,顾名思义就是double型的实体占用内存空间是float的两倍.float是4个字节而double是8个字节.float和double类型的数据,无法精确表示计算结果,这是由于float和double是不精确的计算.大家可以通过下面代码可以看出来: 复制代码 代码如下: p

Java简单类型进行精确浮点数运算

运算 由于Java的简单类型不能够精确的对浮点数进行运算,这个工具类提供精确的浮点数运算,包括加减乘除和四舍五入. 以下为代码: import java.math.BigDecimal; public class Arith { //默认除法运算精度 private static final int DEF_DIV_SCALE = 10; //这个类不能实例化 private Arith(){ } /** * 提供精确的加法运算. * @param v1 被加数 * @param v2 加数 *

JavaScript 浮点数运算 精度问题_javascript技巧

Js代码 复制代码 代码如下: <script type="text/javascript" language="javascript"> alert(1/3);//弹出: 0.3333333333333333 alert(0.09999999 + 0.00000001);//弹出: 0.09999999999999999 alert(-0.09999999 - 0.00000001);//弹出: -0.09999999999999999 alert(0

php中让人头疼的浮点数运算分析_php技巧

本文实例分析了php中让人头疼的浮点数运算.分享给大家供大家参考,具体如下: 在做电商的时候,计算价格是免不了的,然后发现了php的一个坑,口算应该正确的值,php运算出来会跟你不一样 请看下面的代码: $price=69.1; $count=100; $total=$price*$count-6910; echo $total; 你猜一下变量$total的值是多少,运行一下这个代码输出:-9.09494701773E-13 怎么解决这个问题呢? 使用round函数 代码修改成: $price=

DSP中浮点转定点运算--定点数模拟浮点数运算及常见的策略_C 语言

4.定点数模拟浮点数运算及常见的策略 相信大家到现在已经大致明白了浮点数转换成定点数运算的概貌.其实,原理讲起来很简单,真正应用到实际的项目中,可能会遇到各种各样的问题.具我的经验,常见的策略有如下几条: 1)除法转换为乘法或移位运算 我们知道,不管硬件平台如果变换,除法运算所需要的时钟周期都远远多于乘法运算和加减移位运算,尤其是在嵌入式应用中,"效率"显得尤为重要.以笔者的经验,其实,项目中的很大一部分除法运算是可以转换成乘法和移位运算,效率还是有很大提升空间的. 2)查表计算 有些

c语言-一个经典的递归算法,谁能告诉我他的运算流程。我自己是想不通0.0

问题描述 一个经典的递归算法,谁能告诉我他的运算流程.我自己是想不通0.0 #include using namespace std; void reverse(); int main() { printf("enter a sentence: "); reverse(); return 0; } void reverse() { char c; scanf("%c",&c); if(c != 'n') { reverse(); //这一步以后转到哪里执行语

PHP浮点数运算精度的问题

在用PHP进行浮点数的运算中,遇到一个坑,没有得到预期中的结果,如下代码: $a = 69.1;   $b = $a*100;   $c = $b-6910; 你猜$c的值是多少?$c输出的值是-9.0949470177293E-13.为什么会这样? 在PHP官网Float浮点型页面中,讲到: 浮点数的精度 浮点数的精度有限.尽管取决于系统,PHP 通常使用 IEEE 754 双精度格式,则由于取整而导致的最大相对误差为 1.11e-16.非基本数学运算可能会给出更大误差,并且要考虑到进行复合运

解决JS浮点数运算出现Bug的方法_javascript技巧

37.5*5.5=206.08 (JS算出来是这样的一个结果,我四舍五入取两位小数) 我先怀疑是四舍五入的问题,就直接用JS算了一个结果为:206.08499999999998 怎么会这样,两个只有一位小数的数字相乘,怎么可能多出这么小数点出来. 我Google了一下,发现原来这是JavaScript浮点运算的一个bug. 比如:7*0.8 JavaScript算出来就是:5.6000000000000005 网上找到了一些解决办法,就是重新写了一些浮点运算的函数或直接扩大倍数运算. 下面就把这