整数算术运算中的错误

2024-09-04 04:44
文章标签 运算 错误 整数 算术

本文主要是介绍整数算术运算中的错误,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 如果一个整数被零除,将不会产生正确的结果,而是出现一个异常( exception ).在Java中,异常是标志错误的一种方法,我们将在第7章中详细地介绍。对变量或表达式应用%运算符,如果右侧的操作数是零,也将导致一个异常。

    注意,如果一个整型表达式产生的值超出了结果类型的取值范围,这个结果就会按照该数据类型的存储位数截断,结果是不正确的,而且不会得到任何提示。这样处理可以确保在程序中应用的整数类型永远能够适应由计算产生的任何结果。在有些情况下,问题可能出现在中间,即使一个表达式的最终结果在合法的取值范围内,而中间的计算超出了这个范围,也会产生截断,从而得到一个错误的结果。这里举一个常见的例子,如果你使用整型,用2000000乘以100000再除以500000,若先执行乘法运算,就不会获得正确的结果,这是因为乘法的结果超出了整型所能表示的最大值。显然,要是事先知道会发生这类问题,使用一个括号,使除法先被执行,就可以防止它的发生。但是,你要记住,整数除法产生的是一个整数结果,所以,不同的执行顺序可能会产生不同的结果。

    浮点运算

    这四种基本的算术运算符+、一、*、/同样可以应用在浮点表达式中。我们可以在另一个版本的Fruit程序中进行一些试验,这个版本我们称作AverageFruit(平分水果).试试看-个平分水果

    将Fruit.java文件按照下列程序进行修改,并另存为AverageFruit.java.如果愿意的话,你可以将前面使用的新增的代码添加到程序中,是程序在结束前等待键入Enter键。

    piblic calss AverageFruitpublic static main(string[] args)
    {
    //Delare and initialize three varlables
    double numOrange=50.OE-1;
    double numApples=1.0E1;
    double averageFruit=0.0
    averageFruit=InumOranges+numApples)/2.0
    system.out.println(Atotally fruity program)
    system.out.println(Average Fruit in +averageFruit)
    }
    }

    这段代码将产生输出结果:
    A totally fruity propram
    Average fruit is 7.5

    该程序用水果的总数除以2.0来计算它的平均数。正像你所看到的,我们在程序中使用各种形式对double型变量进行初始化,把5.0写成这种形式并不是很好的方法,它只说明你可以书写一个负数指数的数值。

其他的浮点型运算符

    你可以对浮点型变量应用++或一一运算符,其效果与整数变量一样,以1.0的幅度递增或递减浮点型变量。你可以使用前缀或后缀格式,并且每种格式的操作与整数变量完全相同。我们也可以对浮点型数值应用取模运算符%.对于如下操作;
    floatoperandl%floatperand2

    其结果为floatperand1除以floatOperand2得到一个整倍数之后的浮点型余数。例如,

    表达式12.6%5.1结果为2.4

    浮点型算术运算中的错误状态

    浮点型算术运算有可能产生两种错误状态:一种是计算结果超出了取值范围:另一种是结果的数值在数学上是不确定的,比如,0除以0

    为了说明第一种错误,我们可以用一个变t记载水果(fruit)的种类数目,可以定义为:
    double fruitTypes=2.0

    然后再重新编写计算式:
    averageFruit*(numoranges+numApples)/fruitTypes;

    这样更改对其本身来说并没有什么特别的意义,但是当fruitypes为0.0时,这个程序的输出结果将是:
    A toxally fruity program
    Average  fruit is Tnfini.ty

    Infinity表示正无穷大,即大于dOUble类型所能表示的最大数值。负无穷大将输出-Infinity.实际上,你并不希望被零除,任何计算结果只要超出double类型所能表示的最大数值,就会产生这样的结果。例如。用一个非常小的数值重复进行除运算,例如,1.OE-300就会产生一个超出范围的结果。

    如果你想看看不确定数值的样子,就可以用下面这条语句替代计算averageFruat的语句:
    averageFruit={numOranges-5.0)/(numApples-10.0);

    这条语句没有什么实际意义,但它可以产生一个不确定的数值。averageFruit将输出结果NaN.这个值被称为Not-a-Number(非数字),表示不确定的数值。

    一个被赋予不确定值的变量将中断任何使用它的表达式,并且产生结果:N当用一个有穷数值与一个正无穷或负无穷数值进行加、减或乘运算时,结果还是正无穷或负无穷,但是如果你用任何有穷数值除以正无穷或负无穷数值时其结果为0.

这篇关于整数算术运算中的错误的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1135034

相关文章

部署Vue项目到服务器后404错误的原因及解决方案

《部署Vue项目到服务器后404错误的原因及解决方案》文章介绍了Vue项目部署步骤以及404错误的解决方案,部署步骤包括构建项目、上传文件、配置Web服务器、重启Nginx和访问域名,404错误通常是... 目录一、vue项目部署步骤二、404错误原因及解决方案错误场景原因分析解决方案一、Vue项目部署步骤

在MySQL执行UPDATE语句时遇到的错误1175的解决方案

《在MySQL执行UPDATE语句时遇到的错误1175的解决方案》MySQL安全更新模式(SafeUpdateMode)限制了UPDATE和DELETE操作,要求使用WHERE子句时必须基于主键或索引... mysql 中遇到的 Error Code: 1175 是由于启用了 安全更新模式(Safe Upd

SpringBoot中的404错误:原因、影响及解决策略

《SpringBoot中的404错误:原因、影响及解决策略》本文详细介绍了SpringBoot中404错误的出现原因、影响以及处理策略,404错误常见于URL路径错误、控制器配置问题、静态资源配置错误... 目录Spring Boot中的404错误:原因、影响及处理策略404错误的出现原因1. URL路径错

Spring常见错误之Web嵌套对象校验失效解决办法

《Spring常见错误之Web嵌套对象校验失效解决办法》:本文主要介绍Spring常见错误之Web嵌套对象校验失效解决的相关资料,通过在Phone对象上添加@Valid注解,问题得以解决,需要的朋... 目录问题复现案例解析问题修正总结  问题复现当开发一个学籍管理系统时,我们会提供了一个 API 接口去

解决mybatis-plus-boot-starter与mybatis-spring-boot-starter的错误问题

《解决mybatis-plus-boot-starter与mybatis-spring-boot-starter的错误问题》本文主要讲述了在使用MyBatis和MyBatis-Plus时遇到的绑定异常... 目录myBATis-plus-boot-starpythonter与mybatis-spring-b

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi

uva 575 Skew Binary(位运算)

求第一个以(2^(k+1)-1)为进制的数。 数据不大,可以直接搞。 代码: #include <stdio.h>#include <string.h>const int maxn = 100 + 5;int main(){char num[maxn];while (scanf("%s", num) == 1){if (num[0] == '0')break;int len =

PTA求一批整数中出现最多的个位数字

作者 徐镜春 单位 浙江大学 给定一批整数,分析每个整数的每一位数字,求出现次数最多的个位数字。例如给定3个整数1234、2345、3456,其中出现最多次数的数字是3和4,均出现了3次。 输入格式: 输入在第1行中给出正整数N(≤1000),在第二行中给出N个不超过整型范围的非负整数,数字间以空格分隔。 输出格式: 在一行中按格式“M: n1 n2 ...”输出,其中M是最大次数,n

整数Hash散列总结

方法:    step1  :线性探测  step2 散列   当 h(k)位置已经存储有元素的时候,依次探查(h(k)+i) mod S, i=1,2,3…,直到找到空的存储单元为止。其中,S为 数组长度。 HDU 1496   a*x1^2+b*x2^2+c*x3^2+d*x4^2=0 。 x在 [-100,100] 解的个数  const int MaxN = 3000

【经验交流】修复系统事件查看器启动不能时出现的4201错误

方法1,取得『%SystemRoot%\LogFiles』文件夹和『%SystemRoot%\System32\wbem』文件夹的权限(包括这两个文件夹的所有子文件夹的权限),简单点说,就是使你当前的帐户拥有这两个文件夹以及它们的子文件夹的绝对控制权限。这是最简单的方法,不少老外说,这样一弄,倒是解决了问题。不过对我的系统,没用; 方法2,以不带网络的安全模式启动,运行命令行,输入“ne