Citect问题与揪错 点击:1530 | 回复:6



笨猪

    
  • 精华:0帖
  • 求助:0帖
  • 帖子:13帖 | 106回
  • 年度积分:0
  • 历史总积分:181
  • 注册:2002年8月12日
发表于:2006-05-26 14:19:00
楼主
忍不住要发了,今天刚碰到的.
趋势文件记录所有数据为10.44623,趋势采样周期为1秒.现在我用trngettable取出其中的600点到缓存,并且选择保留所有无效和门限值.然后用tablemath求缓存区中的标准偏差,竟然发现返回值为-1.#IND!
阿门,如果求的是标准偏差的话,应该是均方和的开根号.理论上结果应该为0.0.怎么会出现未定义的值.
小弟citect不太会用,请高手指教!谢谢!



cooker

  • 精华:0帖
  • 求助:0帖
  • 帖子:4帖 | 79回
  • 年度积分:0
  • 历史总积分:112
  • 注册:2001年7月14日
发表于:2006-05-26 17:29:00
1楼
你把无效值加入了运算当然会出错。可能用trnisvalid函数进行验证,剔除无效值!笨!

笨猪

  • 精华:0帖
  • 求助:0帖
  • 帖子:13帖 | 106回
  • 年度积分:0
  • 历史总积分:181
  • 注册:2002年8月12日
发表于:2006-05-27 13:12:00
2楼
大人说的不对吆.
首先该历史数据记录的全是同样的,不存在无效点.
其次我用了tablemath函数最后一个参数传递的是1,即使存在无效值,它也会自动剔除.
还请再考虑考虑.

cooker

  • 精华:0帖
  • 求助:0帖
  • 帖子:4帖 | 79回
  • 年度积分:0
  • 历史总积分:112
  • 注册:2001年7月14日
发表于:2006-05-29 17:22:00
3楼
那你就按照我所说的试试看再说吧。

zgdhtiantain

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 20回
  • 年度积分:0
  • 历史总积分:44
  • 注册:2004年11月06日
发表于:2006-05-29 21:15:00
4楼
haha

笨猪

  • 精华:0帖
  • 求助:0帖
  • 帖子:13帖 | 106回
  • 年度积分:0
  • 历史总积分:181
  • 注册:2002年8月12日
发表于:2006-05-30 09:02:00
5楼
cooker兄对CITECT的理解应用能力是我辈所景仰的.
按你的方法俺也试了,剔除了无效点然后再调用tablemath,可是结果还是一样.
对于数学运算,出现无意义的结果,可以参考一下下面的定义:
template<class T>
    class numeric_limits {
public:
    static const bool has_denorm = false;
    static const bool has_denorm_loss = false;
    static const bool has_infinity = false;
    static const bool has_quiet_NaN = false;
    static const bool has_signaling_NaN = false;
    static const bool is_bounded = false;
    static const bool is_exact = false;
    static const bool is_iec559 = false;
    static const bool is_integer = false;
    static const bool is_modulo = false;
    static const bool is_signed = false;
    static const bool is_specialized = false;
    static const bool tinyness_before = false;
    static const bool traps = false;
    static const float_round_style round_style = round_toward_zero;
    static const int digits = 0;
    static const int digits10 = 0;
    static const int max_exponent = 0;
    static const int max_exponent10 = 0;
    static const int min_exponent = 0;
    static const int min_exponent10 = 0;
    static const int radix = 0;
    static T denorm_min() throw();
    static T epsilon() throw();
    static T infinity() throw();
    static T max() throw();
    static T min() throw();
    static T quiet_NaN() throw();
    static T round_error() throw();
    static T signaling_NaN() throw();
    };
如果调用Cout<<numeric_limits<float>::quiet_NaN() << endl;则会返回-1.#IND.所以算式应该是抛出了异常如:
try
{
}
catch(...){
return quiet_NaN(); 
}
NaN代表"Not a Number",确实代表算式中存在无意义的值.
但我使用istrnvalidvalue检测后,把有效值输入到另外一个数组,然后再用tablemath还是出现这个现象,我不太清楚了...

cooker

  • 精华:0帖
  • 求助:0帖
  • 帖子:4帖 | 79回
  • 年度积分:0
  • 历史总积分:112
  • 注册:2001年7月14日
发表于:2006-05-30 18:54:00
6楼
服了U!要不就是citect的bug了,哈哈

热门招聘
相关主题

官方公众号

智造工程师