matlab生成的数值为inf,计算值时为Nan / inf

news/2024/7/21 12:19:57 标签: matlab生成的数值为inf

inf和nan含义如下:

INF表示“无穷大”,是infinite的缩写。NAN表示“无效数字”,是Not a number的缩写。

2.inf是不会崩溃的,但nan是会崩溃的

本人出现的情况:

仔细研究后发现,原来是我获取的 UIImage 对象 等于 nil 了,以至于 image.size.height 值 和 image.size.width 的值,都拿不到了;

那么image的宽高比 计算出来的 imageView 的 imageHeight 的值也就 成 NaN 了。

//部分代码

[cell.photo sd_setImageWithURL:[NSURL URLWithString:ad.imageUrl] placeholderImage:[UIImage imageNamed:@"defaultImage"] completed:^(UIImage *image, NSError *error, EMSDImageCacheType cacheType, NSURL *imageURL) {

imgHeight = image.size.height * [UIScreen mainScreen].bounds.size.width / image.size.width;

weakCell.photo.image = image;

//这种情况就比较特殊了,因为从后台那里拿到的image为nil,导致高度计算不合法,并且image需重新实例出来才有

if (isnan(imgHeight)){

UIImage *image = [UIImage imageNamed:@"defaultImage"];

weakCell.photo.image = image;

imgHeight = ScreenWidth;

}

延伸:

出现的情况:

inf一般是因为得到的数值,超出浮点数的表示范围(溢出,即阶码部分超过其能表示的最大值);

而nan一般是因为对浮点数进行了未定义的操作,如对-1开方。

除以0

sizeWithFont的字符串为nil

数学函数不正确运算

举个例子:

1.0/0.0等于inf,-1.0/0.0等于-inf,0.0+inf=inf;

对负数开方sqrt(-1.0)、对负数求对数(log(-1.0))、0.0/0.0、0.0*inf、inf/inf、inf-inf这些操作都会得到nan。(0/0会产生操作异常;0.0/0.0不会产生操作异常,而是会得到nan)

解决方法:

找到调用参数nan或者inf 的语句加入逻辑判断(运用math类里的isnan):

if (!isnan(CGRectGetMidX(newFrame))) 就是当CGRectGetMidX不为无效参数调用此句.这样就可以解决崩溃了

2.( 得到inf时就查看是否有溢出或者除以0,得到nan时就查看是否有非法操作。)

nan==nan 结果是0或false,即不能和nan进行比较,和nan进行比较得到的结果总是false或0。所以可以用函数: int isNumber(double d){return (d==d);}来判断d是否为nan,若d是nan则返回0,否则返回非零值

float ecg;

if(isnan(ecg)){ //isnan为系统函数

//you code

ecg = 0.0;

}

else {

//you code

}

//inf同理

if (isinf(height)) {

height=0.0f;

}


http://www.niftyadmin.cn/n/984995.html

相关文章

百度charts_NBA Shot Charts:更新

百度chartsFor some reason I recently got it in my head that I wanted to go back and create more NBA shot charts. My previous shotcharts used colored circles to depict the frequency and effectiveness of shots at different locations. This is an extremely eff…

多线程讲解

2019独角兽企业重金招聘Python工程师标准>>> 多线程是java应用程序的一个特点,掌握java的多线程也是作为一java程序员必备的知识。多线程指的是在单个程序中可以同时运行多个同的线程执行不同的任务.线程是程序内的顺序控制流,只能使用分配给…

使用VisualSVN建立SVN Server

首先去官网下载安装包。http://subversion.apache.org/packages.html找到windows的,选择VisualSVN-》VISUALSVN SERVER 双击开始安装 下一步,选择标准版本(企业版九百多刀,屌丝买不起) 第一个是安装目录,第…

php smarty配置文件,Smarty--(2)创建配置文件

完成Smarty配置工作是应用Smarty模板引擎的关键。config.phpheader("Content_type:text/html;charsetUTF8");define(BASE_PATH,$_SERVER[DOCUMENT_ROOT]);define(SMARTY_PATH,\sunyan2015\Smarty\\);require BASE_PATH.SMARTY_PATH.Smarty.class.php;$smartynew Smar…

java虚拟机内存设置

在运行java桌面应用程序的时候,有时候会因为jvm内存太小,从而内存溢出,程序崩溃。可是通过修改 eclipse.ini 中的参数,来实现修改jvm的内存大小。-vmargs-Xms128M -Xmx512M -XX:PermSize64M -XX:MaxPermSize128M这里有几个问题&am…

你能举一些OCL例子吗?包括复杂的和简单的

好的,这里列出一些 OpenCL 的例子: 简单的例子: 向量加法:将两个向量的对应元素相加,得到一个新的向量。常见数学函数:例如 sin、cos、exp 等。求最大值/最小值:在一个数组中找到最大/最小值。 …

php单例模式定义,php单例模式

1,什么是单例模式作为对象的创建模式,单例模式确保某一个类只有一个实例,并且对外提供这个全局实例的访问入口。它不会创建实例副本,而是会向单例类内部存储的实例返回一个引用。2,单例模式的特点三私一公:…

php 找bug小技巧

1,file_put_contents("mylog.log",$mesList."\r\n",FILE_APPEND); //将信息输出到mylog.log这个文件中(常用于在页面无法直接输出时) 2,echo $message ; //将信息输出到浏览器 exit(); 3,如果是ajax 可以用window.alert($mes); 4:/* 无关代码注释掉*/ 5&…