捕获数学函数异常

假如我们要用一个数学函数,比如反正弦函数asin(x),如果变元x的值是由用户提供或某个中间结果,则在调用时必须判断其取值范围是合理,是否满|x|<=1?即

if(fabs(x)<=1)
  y=asin(x);
else
  y=…

对数函数也可作类似的处理。但是如果遇到幂函数pow(x,y)时,问题就不那么简单了。仔细分析将发现:

y
x
负小数 负整数 0 整数 小数
负小数 无意义 有意义 有意义 有意义 无意义
负整数 无意义 有意义 有意义 有意义 无意义
0 无意义 无意义 有意义 有意义 有意义
整数 有意义 有意义 有意义 有意义 有意义
小数 有意义 有意义 有意义 有意义 有意义

例如:pow(-1.2,-1.2)=-1.#IND。如果要编程处理,至少需要六个if语句。即使如此,也有麻烦:如何判断一个double型的变元的值是整数还是小数?

为了处理数学函数运算中出现的异常,VC++提供了一个函数_mather,其原型在<math.h>中:

int _matherr( struct _exception *except );

为了利用此函数,只需在应用数学函数的地方定义一个这样的函数,例如

#include <math.h>
#include <stdio.h>
void main()
{
	double x,y,z;
	x=-1.23;
	y=-1;
	z=pow(x,y);
	printf("%g\n",z);
	y=-1.1;
	z=pow(x,y);
	printf("%g\n",z);
}
int _matherr(struct _exception *except)
{
char* errorString[] = {"_DOMAIN","_SING", "_OVERFLOW", "_PLOSS",
"_TLOSS", "_UNDERFLOW"};
	printf("Error function name is %s\n",except->name);
	printf("The varianbles arg1=%g,arg2=%g\n",except->arg1,except->arg2);
	printf("The error type = %s\n",errorString[except->type]);
	printf("The error value=%g\n",except->retval);
	except->retval=1234;
	printf("After handling error value=%g\n",except->retval);
	return 1;
}

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索数学
, printf
, 函数
, error
, 变元
, EXCEPT
RETVAL
oracle 函数捕获异常、c 捕获异常、android捕获全局异常、android 异常捕获、python 异常捕获,以便于您获取更多的相关知识。

时间: 2025-01-19 17:42:03

捕获数学函数异常的相关文章

关联-mfc 如何捕获UpdateData函数的异常

问题描述 mfc 如何捕获UpdateData函数的异常 UpdateData(true)后如果编辑框关联的变量与用户输入的变量类型不符,例如要求输入数字用户输入的是字母,调用UpdateData(true)可以弹出提示,说明用户输入有误,那么我怎么能从UpdateData(true)函数中获取用户的错误类型呢? 解决方案 重写ddv函数http://www.cnblogs.com/mavaL/articles/1860413.htmlhttp://blog.csdn.net/laogaoav/

ASP常见数学函数 Abs Atn Cos 等详细详解

[名称] Abs [类别] 数学函数 [原形] Abs(number) [参数] 必选的.Number参数是一个任何有效的数值型表达式 [返回值] 同 number 的类型 [异常/错误] 无 [描述] 返回参数number 的绝对值.一个数的绝对值是将正负号去掉以后的值.例如,ABS(-1) 和 ABS(1) 都返回 1.Abs(5.2)=5.2,Abs(-5)=5 [示例] Dim MyNumber MyNumber = Abs(50.3) ' 返回 50.3. MyNumber = Abs

ASP数学函数Abs Atn Cos等详解

[名称] Abs [类别] 数学函数 [原形] Abs(number) [参数] 必选的.Number参数是一个任何有效的数值型表达式 [返回值] 同number的类型 [异常/错误] 无 [描述] 返回参数number的绝对值.一个数的绝对值是将正负号去掉以后的值.例如,ABS(-1)和ABS(1)都返回1.Abs(5.2)=5.2,Abs(-5)=5 [示例] DimMyNumber MyNumber=Abs(50.3)'返回50.3. MyNumber=Abs(-50.3)'返回50.3.

iOS 捕获系统外异常

iOS 捕获系统外异常 太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. 有时应用崩溃,而日志中的输出信息太少,无法定位问题,这是最头疼的事情,尤其很累的时侯,已经想不起来刚才改过什么了,这就叫做

iOS开发中常用的数学函数

iOS开发中常用的数学函数   /*---- 常用数学公式 ----*/ //指数运算 3^2 3^3 NSLog(@"结果 %.f", pow(3,2)); //result 9 NSLog(@"结果 %.f", pow(3,3)); //result 27 //开平方运算 NSLog(@"结果 %.f", sqrt(16)); //result 4 NSLog(@"结果 %.f", sqrt(81)); //result

ASP进阶学习必经之认识数学函数11种

函数|函数     在这篇asp之数学函数里,我们将会以表格的形式,让大家了解到关于ASP中能用到的数学函数,里面包括一个数的绝对值.一个数的平方根,角度的正弦.余弦值等. 函数语法功能AbsAbs(num)返回一个数的绝对值SqrSqu(num)返回一个数的平方根SinSin(num)返回角度的正弦值CosCos(num)返回角度的余弦值TanTan(num)返回角度的正切值AtnAtn(num)返回角度的反正切值LogLog(num)返回一个数的对数值IntInt(num)取整函数,返回小于

MSSQL SERVER 2005 数学函数整理

MSSQL SERVER 2005 数学函数 1.求绝对值 ABS() select FWeight-50,ABS(FWeight-50),ABS(-5.38) from T_Person 2.求幂 POWER(X,Y) 用来计算X的Y次幂 select FWeight,POWER(FWeight,-0.5),POWER(FWeight,2), POWER(FWeight,3),POWER(FWeight,4) from T_Person select Power(2,2) 3.求平方根 SQR

asp之数学函数

函数 asp之数学函数常用的数学函数: 函数 语法 功能 Abs Abs(num) 返回一个数的绝对值 Sqr Squ(num) 返回一个数的平方根 Sin Sin(num) 返回角度的正弦值 Cos Cos(num) 返回角度的余弦值 Tan Tan(num) 返回角度的正切值 Atn Atn(num) 返回角度的反正切值 Log Log(num) 返回一个数的对数值 Int Int(num) 取整函数,返回小于等于number的第一个整数 FormatNumber FormatNumber(

学习动态网页技术ASP:认识数学函数

动态|函数|网页 在这篇asp之数学函数里,我们将会以表格的形式,让大家了解到关于ASP中能用到的数学函数,里面包括一个数的绝对值.一个数的平方根,角度的正弦.余弦值等. 函数 语法 功能 Abs Abs(num) 返回一个数的绝对值 Sqr Squ(num) 返回一个数的平方根 Sin Sin(num) 返回角度的正弦值 Cos Cos(num) 返回角度的余弦值 Tan Tan(num) 返回角度的正切值 Atn Atn(num) 返回角度的反正切值 Log Log(num) 返回一个数的对