整数算术运算中的错误

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

相关文章

【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

【Java中的位运算和逻辑运算详解及其区别】

Java中的位运算和逻辑运算详解及其区别 在 Java 编程中,位运算和逻辑运算是常见的两种操作类型。位运算用于操作整数的二进制位,而逻辑运算则是处理布尔值 (boolean) 的运算。本文将详细讲解这两种运算及其主要区别,并给出相应示例。 应用场景了解 位运算和逻辑运算的设计初衷源自计算机底层硬件和逻辑运算的需求,它们分别针对不同的处理对象和场景。以下是它们设计的初始目的简介:

位运算:带带孩子吧,孩子很强的!

快速进制 在聊到位运算之前,不妨先简单过一遍二进制的东西。熟悉二进制和十进制的快速转换确实是掌握位运算的基础,因为位运算直接在二进制位上进行操作。如果不熟悉二进制表示,很难直观理解位运算的效果。 这里主要涉及二进制和十进制之间的互相转换。 十进制转二进制 十进制转二进制可以使用常见的 除2取余法 进行。每次将十进制除以2并记录所得余数,直到商为0,然后再将记录的余数 从下往上排列即

SQL2005 性能监视器计数器错误解决方法

【系统环境】 windows 2003 +sql2005 【问题状况】 用户在不正当删除SQL2005后会造成SQL2005 性能监视器计数器错误,如下图 【解决办法】 1、在 “开始” --> “运行”中输入 regedit,开启注册表编辑器,定位到 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVer

ssm 之事务管理出现错误

JDBC Connection will not be managed by Spring 项目采用的是分布式架构,分别有controller,service,solr三个服务器,之间通过dubbo进行调用,经过测试发现事务配置完以后不能通过spring进行管理,其中两条insert和一条update语句都执行完毕,异常并没有使得事务进行回滚,通过调取debug日志发现“JDBC Conn

Unstructured cannot write mode RGBA as JPEG 错误解决

Unstructured cannot write mode RGBA as JPEG 错误解决 0. 错误详细1. 解决方法 0. 错误详细 Image Extraction Error: Skipping the failed imageTraceback (most recent call last):File "/root/miniconda3/envs/learn-y