判断浮点数溢出的方法
出处:http://blog.csdn.net/delphiwcdj/article/details/6261931
方法1:判断是否溢出,一是使用函数判断,二是与最大最小值比较
#include <cstdio>
#include <cmath>
#include <cfloat>
int main()
{
// double类型
double dval1 = 1.2;
double dval2 = 1.2*pow((double)10,308);
double dval3 = 1.2*pow((double)10,309);
printf("%d/n",_finite(dval1));// 1 未溢出
printf("%d/n",_finite(dval2));// 1
printf("%d/n",_finite(dval3));// 0 溢出
if (dval1 > DBL_MAX || dval1 < DBL_MIN)
printf("overflow/n");
if (dval2 > DBL_MAX || dval2 < DBL_MIN)
printf("overflow/n");
if (dval3 > DBL_MAX || dval3 < DBL_MIN)
printf("overflow/n");
// float类型
float fval1 = 1.2f;
float fval2 = 1.2f*(float)pow((double)10,38);
float fval3 = 1.2f*(float)pow((double)10,39);
printf("%d/n",_finite(fval1));// 1 未溢出
printf("%d/n",_finite(fval2));// 1
printf("%d/n",_finite(fval3));// 0 溢出
if (fval1 > FLT_MAX || fval1 < FLT_MIN)
printf("overflow/n");
if (fval2 > FLT_MAX || fval2 < FLT_MIN)
printf("overflow/n");
if (fval3 > FLT_MAX || fval3 < FLT_MIN)
printf("overflow/n");
return 0;
#include <iostream>
#include <float.h>
using namespace std;
int main()
{
float f = 0.f;
float d = -100.f / f;// -1.#INF000
if (d > FLT_MAX || d < FLT_MIN)
cout<<"error"<<endl;
float x = 1e100;
if (x > FLT_MAX || x < FLT_MIN)
cout<<"error"<<endl;
return 0;
}
方法2:捕获浮点数溢出异常
#include <cstdio>
#include <cmath>
#include <cfloat>
#include <fpieee.h>
#include <excpt.h>
#include <float.h>
int fpieee_handler(_FPIEEE_RECORD *pieee)
{
if (pieee->Cause.Overflow == 1) {// 处理溢出
return EXCEPTION_CONTINUE_EXECUTION;
} else {
return EXCEPTION_EXECUTE_HANDLER;
}
}
int main()
{
__try {
unsigned int u;
unsigned int control_word;
_controlfp_s(&control_word, 0, 0);
u = control_word & (~_EM_OVERFLOW);
_controlfp_s( &control_word, u, _MCW_EM);
// 你的代码
// double类型
double dval3 = 1.2*pow((double)10,309);
printf("%d/n",_finite(dval3));// 0 溢出=> 1
if (dval3 > DBL_MAX || dval3 < DBL_MIN)
printf("overflow/n");
// float类型
float fval3 = 1.2f*(float)pow((double)10,39);
printf("%d/n",_finite(fval3));// 0 溢出=> 1
if (fval3 > FLT_MAX || fval3 < FLT_MIN)
printf("overflow/n");
}
__except (_fpieee_flt(GetExceptionCode(),
GetExceptionInformation(),
fpieee_handler)){
}
}
float.h文件中定义的一些常量:
...
#define DBL_DIG 15 /* # of decimal digits of precision */
#define DBL_EPSILON 2.2204460492503131e-016 /* smallest such that 1.0+DBL_EPSILON != 1.0 */
#define DBL_MANT_DIG 53 /* # of bits in mantissa */
#define DBL_MAX 1.7976931348623158e+308 /* max value */
#define DBL_MAX_10_EXP 308 /* max decimal exponent */
#define DBL_MAX_EXP 1024 /* max binary exponent */
#define DBL_MIN 2.2250738585072014e-308 /* min positive value */
#define DBL_MIN_10_EXP (-307) /* min decimal exponent */
#define DBL_MIN_EXP (-1021) /* min binary exponent */
#define _DBL_RADIX 2 /* exponent radix */
#define _DBL_ROUNDS 1 /* addition rounding: near */
#define FLT_DIG 6 /* # of decimal digits of precision */
#define FLT_EPSILON 1.192092896e-07F /* smallest such that 1.0+FLT_EPSILON != 1.0 */
#define FLT_GUARD 0
#define FLT_MANT_DIG 24 /* # of bits in mantissa */
#define FLT_MAX 3.402823466e+38F /* max value */
#define FLT_MAX_10_EXP 38 /* max decimal exponent */
#define FLT_MAX_EXP 128 /* max binary exponent */
#define FLT_MIN 1.175494351e-38F /* min positive value */
#define FLT_MIN_10_EXP (-37) /* min decimal exponent */
#define FLT_MIN_EXP (-125) /* min binary exponent */
#define FLT_NORMALIZE 0
#define FLT_RADIX 2 /* exponent radix */
#define FLT_ROUNDS 1 /* addition rounding: near */
...
判断浮点数溢出的方法相关推荐
- Python|装饰器|执行时间|递归|动态属性|静态方法和类|继承和多态|isinstance类型判断|溢出|“魔法”方法|语言基础50课:学习记录(6)-函数的高级应用、面向对象编程、进阶及应用
文章目录 系列目录 原项目地址: 第16课:函数的高级应用 装饰器(记录执行时间的例子) 递归调用 简单的总结 第17课:面向对象编程入门 类和对象 定义类 创建和使用对象 初始化方法 打印对象 面向 ...
- python判断字母数字_Python判断字符串是否为字母或者数字(浮点数)的多种方法
str为字符串s为字符串 str.isalnum() 所有字符都是数字或者字母 str.isalpha() 所有字符都是字母 str.isdigit() 所有字符都是数字 str.isspace() ...
- 定点数与浮点数的表示方法
计算机组成原理--定点数与浮点数 计算机中常用的数据表示格式有两种,一是定点格式,二是浮点格式.一般来说,定点格式容许的数值范围有限,要求的处理硬件比较简单.而浮点格式容许的数值范围很大,要求的处理硬 ...
- Java如何判断整数溢出,溢出后怎么得到提示?
作者:Aaron_涛 blog.csdn.net/qq_33330687/article/details/81626157 问题 在之前刷题的时候遇见一个问题,需要解决int相加后怎么判断是否溢出,如 ...
- 素数(质数)判断的五种方法
素数判断的五种方法 素数判断是我们写程序过程中经常遇见的一个问题,于是今天我简单地整理一下常用的素数判断的方法. 素数的介绍 素数定义 质数(prime number)又称素数,有无限个.一个大于1的 ...
- 素数判断的几种方法代码实现及其复杂度分析
素数判断的几种方法代码实现及其复杂度分析 原文链接:http://blog.csdn.net/infinitezhen/article/details/8961964 一. 朴素判断素数 根据素数 ...
- 计算机中浮点数表示方法,浮点数的表示方法
<浮点数的表示方法>由会员分享,可在线阅读,更多相关<浮点数的表示方法(2页珍藏版)>请在人人文库网上搜索. 1.浮点数的表示方法 一.浮点数表示 一个数的浮点形式(设基数是2 ...
- javascript 往一个节点动态添加元素、内容并判断是否溢出,溢出则删除
添加元素简单: var left_div = document.getElementById("left_div");var para = document.createEleme ...
- 单行文本 判断是不是溢出
判断文本一行文本是不是溢出的方法 ,常用于查看更多 .text_wrapper{height: 20px;line-height: 20px;width: 150px;border: 1px salm ...
最新文章
- pr 文件结构不一致_建筑工程合同与招投标文件不一致,工程结款应该以哪份文件为主?...
- 身份证丢失后被刷脸欠上万贷款,银行:人脸识别到就是你借的!
- java 开发工具_Java开发工具和环境,你了解多少?
- 【转】维护工厂库存的一般设置
- 剑三服务器文件在哪里,剑三服务器同步设置在哪
- Java黑皮书课后题第5章:**5.36(商业应用:检测ISBN)使用循环简化编程练习题3.9
- NGcodec谈FPGA编码与HEVC和AV1
- settimeout( )是全局函数吗_JS函数的执行
- 【MySQL】基于Docker的Mysql主从复制搭建
- Visual Studio会让嵌入式开发变得更香
- 嵌入式软件开发工程师的养成之路——从 推挽输出 开始
- 从零开始——安装插件和各种专业术语
- InDesign 教程,如在使用的不同类型的框架?
- Android Mvp架构的小demo
- 原创度检测工具-文章原创度在线检测免费
- 在vc++如何响应键盘和鼠标事件-visual c++
- 安装studio3t
- HTML figure 标签 figcaption 标签
- Excel VBA 根据单元格内容更改工作表名称
- Java学习第一节jdk的安装及相关知识
热门文章
- 遥感在计算机领域的应用,遥感技术在测绘工作中的应用分析
- java窗口如何写不能移动_[求助]请教高手,下面程序为何组件不能自由移动,百思不得其解!...
- Android中的Dialog
- 登录功能和公聊功能的实现
- orm mysql_ORM介绍
- java SSM框架
- ubuntu没有interfaces文件_ubuntu里终端中eth0为何没有显示IP地址
- c++的引用是什么意思?怎么回事?
- Linux 中的动态链接库和静态链接库是干什么的?
- 从postgress 读取数据