c编程中出现除以0的情况,-1.#IND00000

本文探讨了在编程中遇到的一个常见问题——除数为零的情况。这种情况会导致运算结果为无穷小,进而引发越界或无效值的问题。文章介绍了如何使用函数_isnan来判断结果是否为无效值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

考虑不周全时,有时候将0作为了除数,不会报错,但是得到的结果将不是有效数字,如下:

这里写图片描述
就是除数出现0的情况导致的,所以结果为无穷小,导致越界或者无效;
另外需要判断是否产生的是无效的,可以利用函数float.h中一个函数_isnan来进行判断,
int _isnan(double x);
当x是一个无效值(NaN, Not a Number) 时,返回非零值,否则返回0.

``` { —— 调整估值逻辑 —— } DNP_NORM:=IF(FINANCE(33)>0 AND FINANCE(1)>0, C/MAX((FINANCE(33)*FINANCE(34))/IF(ISNULL(FINANCE(1)),1E-6,FINANCE(1)),1E-6), 9999); DNP:=IF(FINANCE(33)>FINANCE(34)*0.15, DNP_NORM*MA((C-REF(C,21))/REF(C,21)*100,21), IF(DNP_NORM<9999,DNP_NORM,9999)); PB_RATE:=IF(IF(ISNULL(FINANCE(5)),1E-6,FINANCE(5))/IF(ISNULL(FINANCE(1)),1E-6,FINANCE(1))>0.15, (C/IF(ISNULL(FINANCE(5)),1E-6,FINANCE(5)))*SQRT(MAX(FINANCE(33)/IF(ISNULL(FINANCE(1)),1E-6,FINANCE(1)),0))*IF(ISNULL(INDBLOCK(5)),0,INDBLOCK(5))/100, 9999); PEG:=DNP/EMA(MAX(FINANCE(54)/FINANCE(34)*100,0.15),8); IND_RS:=EMA(((C-REF(C,21))/REF(C,21))/((INDEXC-REF(INDEXC,21))/REF(INDEXC,21))*2.618,13)* CORR(C,INDEXC,55); { —— 波动率优化 —— } VOLAT:=EMA(STD(C,34)/EMA(C,34),55)*SQRT(252); VAR_P:=IF(VOLAT<0.12,144, IF(VOLAT<0.18,89, IF(VOLAT<0.25,55,34))); FST_L:=LLVBARS(C,VAR_P)*0.618+HHVBARS(C,VAR_P)*0.382; SLW_L:=CEILING(VAR_P*1.618*VOLAT/0.2); SGN_L:=IF(VAR_P<=34,5, IF(VAR_P<=89,8,13)); { —— 资金流向 —— } MAIN_F:=(L2_AMO(0,2)+L2_AMO(1,1)-L2_AMO(0,3))/CAPITAL*VOLAT/0.2; FUND_T:=EMA(MAIN_F,5)*2.236+ EMA(MAIN_F,13)*1.618- EMA(MAIN_F,34)*0.618; MNY_TR:=SUM(MAIN_F>0.06,5)>=4 AND SLOPE(FUND_T,5)>0.05 AND (HHV(FUND_T,13)-LLV(FUND_T,13))/LLV(FUND_T,13)<0.3; HT_IDX:=EMA(COUNT(C=ZTPRICE(REF(C,1),0.1),21)/21*VOL/CAPITAL,5)*3+ FINANCE(25)/FINANCE(1)*2+ L2_AMO(0,2)/CAPITAL*1.5; { —— 周期共振条件 —— } MTH_MA:=EMA(C,610)*0.8+EMA(C,144)*0.2; MTH_TR:=C>MTH_MA*1.08 AND SLOPE(MTH_MA,8)>0.005 AND C>EMA(C,233); WK_D:=EMA(C,55)-EMA(C,233); WK_EA:=EMA(WK_D,34); WK_MCD:=CROSS(WK_D,WK_EA) AND WK_D>0 AND WK_D>EMA(WK_D,21); DAY_B:=C>HHV(H,55)*0.997 AND V>MA(V,89)*1.8 AND ABS((C-L)/L)<0.015 AND (O-L)/(H-L)>0.618; DAY_RS:=RSI(5,13,34)>75 AND RSI(13,34,55)>RSI(5,13,34)*1.05; M60_BRK:=C#MIN60>HHV(H,144)#MIN60*0.995 AND V#MIN60>MA(V,89)#MIN60*1.5 AND C#MIN60/DYNAINFO(11)>1.08; M60_KDJ:=CROSS(K#MIN60,D#MIN60) AND J#MIN60>85 AND J#MIN60>REF(J#MIN60,8)*1.3; { —— 风控模块 —— } DBT_FLT:=FINANCE(42)/FINANCE(1)<INDBLOCK(25)/100; CSH_FLW:=FINANCE(25)/FINANCE(1)>INDBLOCK(75)/100; BTA_FLT:=BETWEEN(SLOPE(C/INDEXC,144),0.9,1.1) AND CORR(C,INDEXC,89)>0.6; { —— 最终信号合成 —— } STR_SIG:=MTH_TR AND IND_RS>2.2; CMP_SIG:=WK_MCD AND FUND_T>0.12; TCT_SIG:=DAY_B AND DAY_RS AND M60_BRK AND M60_KDJ; FN_SIG:=STR_SIG AND CMP_SIG AND TCT_SIG AND DBT_FLT AND CSH_FLW AND BTA_FLT AND PEG<0.65 AND DNP<18 AND FUND_T>0.15 AND MNY_TR AND HT_IDX>2.5 AND COUNT(FN_SIG,89)=0 AND BETWEEN(TIME,93000,145700) AND DYNAINFO(17)>0.5; CLS_SIG:=STR_SIG AND CMP_SIG AND C>EMA(C,89)*1.1 AND V>MA(V,144)*2.2 AND FUND_T>0.2 AND FINVALUE(0)=0; 选股条件:FN_SIG;```你的身份是高级编程技术专家,精通各类编程语言,能对编程过程中的各类问题进行分析和解答。我的问题是【我正在编辑【通达信条件选股】代码,遇到了 【 { —— 调整估值逻辑 —— } DNP_NORM:=IF(FINANCE(33)>0 AND FINANCE(1)>0, C/MAX((FINANCE(33)*FINANCE(34))/IF(ISNULL(FINANCE(1)),1E-6,FINANCE(1)),1E-6), 9999) 详细信息 : 您在括号前写的不是函数、公式等, 且缺少必要的运算符! 错误起始位置 : 106 ; 长度: 7】,请帮我检查并改正错误点补全正确代码,用通达信规范语法生成优化后完整代码。原有选股逻辑完整保留。
最新发布
03-30
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值