Objective-C 中 判断 NaN

本文探讨了在使用Objective-C开发播放器时遇到的问题:视频播放结束后,播放时间显示为NaN。解释了NaN的概念及其在单精度浮点数中的表示方式,并提供了检查播放时间是否为NaN的方法。

今天在弄一个Objective-C的播放器,碰到一个 播放时间 在视频播放完之后会显示为NaN的问题

 NaN,是Not a Number的缩写。

  NaN 用于处理计算中出现的错误情况,

比如 0.0 除以 0.0 或者求负数的平方根。由上面的表中可以看出,对于单精度浮点数,NaN 表示为指数为 emax + 1 = 128(指数域全为 1),且尾数域不等于零的浮点数。IEEE 标准没有要求具体的尾数域,所以 NaN 实际上不是一个,而是一族。不同的实现可以自由选择尾数域的值来表达 NaN,比如 Java 中的常量 Float.NaN 的浮点数可能表达为 01111111110000000000000000000000,其中尾数域的第一位为 1,其余均为 0(不计隐藏的一位),但这取决系统的硬件架构。Java 中甚至允许程序员自己构造具有特定位模式的 NaN 值(通过 Float.intBitsToFloat() 方法)。比如,程序员可以利用这种定制的 NaN 值中的特定位模式来表达某些诊断信息。

//可以用下面方法 isnan(x)


Calling SDPT3 4.0: 82 variables, 40 equality constraints For improved efficiency, SDPT3 is solving the dual problem. ------------------------------------------------------------ num. of constraints = 40 dim. of sdp var = 40, num. of sdp blk = 20 dim. of linear var = 22 ******************************************************************* SDPT3: Infeasible path-following algorithms ******************************************************************* version predcorr gam expon scale_data HKM 1 0.000 1 0 it pstep dstep pinfeas dinfeas gap prim-obj dual-obj cputime ------------------------------------------------------------------- 0|0.000|0.000|4.5e+01|4.5e+00|4.9e+12| 3.000000e+11 0.000000e+00| 0:0:00| chol 1 1 1|0.989|0.975|9.3e+01|1.1e-01|1.8e+11| 3.776753e+10 -1.823606e-14| 0:0:00| chol 1 1 2|0.989|0.989|1.0e+00|1.2e-03|2.0e+09| 4.973382e+08 -1.823644e-14| 0:0:00| chol 1 1 3|0.984|0.989|1.7e-02|1.4e-05|2.6e+07| 8.248717e+06 -1.823732e-14| 0:0:00| chol 1 2 4|0.837|1.000|2.9e-03|1.3e-10|3.3e+06| 2.071204e+06 -2.250230e-14| 0:0:00| chol 2 2 5|0.977|1.000|7.5e-05|5.9e-11|1.7e+05| 1.243212e+05 -2.475121e-14| 0:0:00| chol 1 1 6|0.985|1.000|1.2e-06|4.6e-11|4.7e+03| 3.832586e+03 -2.544337e-14| 0:0:00| chol 1 1 7|0.985|1.000|1.8e-08|4.1e-11|1.2e+02| 1.039887e+02 -2.637470e-14| 0:0:00| chol 1 1 8|0.986|1.000|2.7e-10|3.8e-11|3.0e+00| 2.651099e+00 -2.762357e-14| 0:0:00| chol 1 1 9|0.986|1.000|4.0e-12|3.7e-11|7.4e-02| 6.549016e-02 -2.932940e-14| 0:0:00| chol 1 1 10|0.986|1.000|5.8e-14|1.0e-12|1.6e-03| 1.597406e-03 -3.177462e-14| 0:0:00| chol 1 1 11|0.989|1.000|6.5e-16|1.0e-12|1.8e-05| 1.774781e-05 -3.180134e-14| 0:0:00| chol 1 1 12|0.985|1.000|9.9e-18|1.0e-12|4.1e-07| 4.002336e-07 -4.598297e-14| 0:0:00| chol 1 1 13|0.939|1.000|6.0e-19|1.0e-12|2.8e-08| 2.747056e-08 -6.246802e-14| 0:0:00| chol 1 1 14|0.881|1.000|7.2e-20|1.0e-12|3.6e-09| 3.433513e-09 -1.071914e-13| 0:0:00| stop: max(relative gap, infeasibilities) < 1.49e-08 ------------------------------------------------------------------- number of iterations = 14 primal objective value = 3.43351297e-09 dual objective value = -1.07191363e-13 gap := trace(XZ) = 3.55e-09 relative gap = 3.55e-09 actual relative gap = 3.43e-09 rel. primal infeas (scaled problem) = 7.17e-20 rel. dual " " " = 1.00e-12 rel. primal infeas (unscaled problem) = 0.00e+00 rel. dual " " " = 0.00e+00 norm(X), norm(y), norm(Z) = 7.4e-10, 1.5e+09, 2.2e+10 norm(A), norm(b), norm(C) = 1.1e+01, 1.0e+00, 2.2e+10 Total CPU time (secs) = 0.05 CPU time per iteration = 0.00 termination code = 0 DIMACS: 7.2e-20 0.0e+00 1.1e-12 0.0e+00 3.4e-09 3.6e-09 ------------------------------------------------------------------- ------------------------------------------------------------ Status: Solved Optimal value (cvx_optval): +0.00221993 测试1-只有能耗: Solved Calling SDPT3 4.0: 112 variables, 50 equality constraints For improved efficiency, SDPT3 is solving the dual problem. ------------------------------------------------------------ num. of constraints = 50 dim. of sdp var = 60, num. of sdp blk = 30 dim. of linear var = 22 ******************************************************************* SDPT3: Infeasible path-following algorithms ******************************************************************* version predcorr gam expon scale_data HKM 1 0.000 1 0 it pstep dstep pinfeas dinfeas gap prim-obj dual-obj cputime ------------------------------------------------------------------- 0|0.000|0.000|6.3e+01|4.5e+00|4.9e+12| 2.999980e+11 0.000000e+00| 0:0:00| chol 1 1 1|0.000|0.000|6.3e+01|4.5e+00|4.9e+12| 2.999978e+11 -2.988746e-20| 0:0:00| chol 1 2 2|0.000|0.000|6.3e+01|4.5e+00|4.9e+12| 2.999978e+11 -9.419087e-19| 0:0:00| chol 1 1 3|0.000|0.000|6.3e+01|4.5e+00|4.9e+12| 2.999962e+11 -2.203428e-17| 0:0:00| chol 1 1 4|0.000|0.000|6.3e+01|4.5e+00|4.9e+12| 2.999608e+11 -4.948138e-16| 0:0:00| *** Too many tiny steps: restarting with the following iterate. *** [X,y,Z] = infeaspt(blk,At,C,b,2,1e5); chol 1 2 5|0.000|0.000|6.3e+05|1.0e+00|2.2e+12| 2.446634e+16 -2.161569e-17| 0:0:00| *** Too many tiny steps even after restarting stop: steps too short consecutively* ------------------------------------------------------------------- number of iterations = 5 primal objective value = 2.99996157e+11 dual objective value = -2.20342799e-17 gap := trace(XZ) = 4.92e+12 relative gap = 1.64e+01 actual relative gap = 1.00e+00 rel. primal infeas (scaled problem) = 6.32e+01 rel. dual " " " = 4.51e+00 rel. primal infeas (unscaled problem) = 0.00e+00 rel. dual " " " = 0.00e+00 norm(X), norm(y), norm(Z) = 3.0e+05, 3.5e+05, 1.0e+11 norm(A), norm(b), norm(C) = 1.2e+01, 1.0e+00, 2.2e+10 Total CPU time (secs) = 0.04 CPU time per iteration = 0.01 termination code = -5 DIMACS: 6.3e+01 0.0e+00 5.0e+00 0.0e+00 1.0e+00 1.6e+01 ------------------------------------------------------------------- ------------------------------------------------------------ Status: Failed Optimal value (cvx_optval): NaN 测试2-添加无用inv_pos: Failed
最新发布
10-15
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值