| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1645 人关注过本帖
标题:C++菜鸟请教大家如何实现求积?
取消只看楼主 加入收藏
ie5054
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2010-8-13
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:9 
C++菜鸟请教大家如何实现求积?
最近学习用C++编DLL,以供大智慧调用,碰到的问题如下。


__declspec(dllexport) int WINAPI MYMAVOL(const CALCINFO* pCalcInfo)
{
float fTotal;
int nPeriod,i,j;
if (pCalcInfo->m_pfParam1==NULL ||       //参数1有效?
  pCalcInfo->m_nParam1Start>=0 ||       //参数1为常数?
  pCalcInfo->m_pfParam2)          //仅有一个参数?
    return -1;
nPeriod = (int)*pCalcInfo->m_pfParam1;      //参数1
if (nPeriod < 2)             //参数1合法?
    return -1;
for(i=nPeriod-1;i<pCalcInfo->m_nNumData;i++)  //计算nPeriod周期的均线,数据
{                //从nPeriod-1开始有效
  fTotal = 0.0f;
  for(j=0;j<nPeriod;j++)          //累加
   fTotal += pCalcInfo->m_pStkData[i-j].m_fVolume;
  pCalcInfo->m_pResultBuf[i] = fTotal/nPeriod;   //平均
}
return nPeriod-1;
}







====================其中这一段
  fTotal = 0.0f;
  for(j=0;j<nPeriod;j++)          //累加
   fTotal += pCalcInfo->m_pStkData[i-j].m_fVolume;
  pCalcInfo->m_pResultBuf[i] = fTotal/nPeriod;   //平均
=========================================


这是求和的程序段。。。。。我想变成求积的公式段。于是就做了如下修改。
  fTotal = 0.0f;
  for(j=0;j<nPeriod;j++)          //累加
   fTotal *= pCalcInfo->m_pStkData[i-j].m_fVolume;
  pCalcInfo->m_pResultBuf[i] = fTotal/nPeriod;   //平均

但是结果不对。。我怀疑是fTotal = 0.0f;这个变量付值的的问题。
因为求和可以是累加0也没关系。但是求积,累乘0就麻烦了。。

有高手指点一下吗。我应该怎么改,才能实现求积?
搜索更多相关主题的帖子: 大智慧 
2010-08-13 14:43
ie5054
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2010-8-13
收藏
得分:0 
呵呵。希望路过的朋友指点一二。好让我堤湖灌顶
2010-08-13 14:44
ie5054
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2010-8-13
收藏
得分:0 
呵呵。一起学习吧。
2010-08-13 17:52
ie5054
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2010-8-13
收藏
得分:0 
谢谢楼上的同志。我这 就试一下
2010-08-13 18:21
ie5054
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2010-8-13
收藏
得分:0 
rainbow1,我试过了,没用。呵呵。谢谢指点。
再等会的朋友出现
2010-08-13 18:32
ie5054
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2010-8-13
收藏
得分:0 
楼上的朋友可能想的太深奥了。不是求积分。
大智慧不知道你有研究吗?
比如有十天。 分别是: 1天 2天 3天 4天 5天 6天 7天 8天 9天 10天
 对应有每天的收盘价: 3元 2元 4元 5元 3元 4元 6元 3元 2元 5元

我现在需要的就是把这十天的收盘价全部相乘,
按理来说利用循环很容易实现。
积=1;
for(i=1,i<11,i++)
积*=收盘价[i];


呵呵。不小的为什么这样子会不行。想不通
2010-08-14 10:01
ie5054
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2010-8-13
收藏
得分:0 
楼上的朋友。还在吗。我还想请教你一个问题。

  fTotal = 0.0f;
  for(j=0;j<nPeriod;j++)          //累加
   fTotal *= pCalcInfo->m_pStkData[i-j].m_fVolume;
  pCalcInfo->m_pResultBuf[i] = fTotal

我想求fTotal的平方根,用什么表达式实现
就是求  fTotal^2
 
2010-08-17 15:36
ie5054
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2010-8-13
收藏
得分:0 
不清楚你的m_pResultBuf是不是int类型?

m_pResultBuf是大智慧C++接口里面的变量吧。。具体是不是int类型的我不是很清楚。

它的做用就是把参数带回给大智慧,
pCalcInfo->m_pResultBuf[i] = fTotal
这句的意思相当于。把fTotal的值带回给大智慧。。就是通过pCalcInfo->m_pResultBuf[i]这个来带回。
m_pResultBuf[i]这个带回的是一组数。随着i的变化。带回不同的值。
2010-08-17 15:41
ie5054
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2010-8-13
收藏
得分:0 
真心谢谢楼上各位热心的朋友给我的教导。祝你们开心快乐。

关于那个求积的问题。我研究很久了。最后发现C++程序这部分是没有问题。出问题的地方在于和大智慧数据交接的地方

经过多次研究。发现求积和求和不同。求和可以把以往所有的数据相加。就算是以住第一次数剧出现为零也没关系,因为是累加。求积就不行了。它把以住所有的数据相乘,如果第一次数剧或第一次之前为零。。相乘的话,那是没用了。所以我们要找到第一次数剧不为零的地方。让程序从这个不为零的地方开始累乘.


比如第一次出现线1的位置是8.

-----------------------------这样就不行。
线1:ma(c,5)/ma(c,8);
nn:BARPOS-BARSSINCE(线1);-------------//事实上。这个数值求出来也是8
要求积的线:"fxjfunc@函数"(线1,nn);


-----------------------------这样就能求出这条线的累乘。
线1:ma(c,5)/ma(c,8);
要求积的线:"fxjfunc@函数"(线1,8);


难道输进去的变量,一定要是常数吗。不能用求出来的数值代替吗。




//-------------------------C++程序如下
__declspec(dllexport) int WINAPI IETWOVAR(const CALCINFO* pCalcInfo)
{
        float f,fTotal;
        int nPeriod,i,j;
        const float* pValue;
        if(pCalcInfo->m_pfParam1 &&  pCalcInfo->m_pfParam2 &&   
       pCalcInfo->m_nParam1Start>=0 &&                           
       pCalcInfo->m_pfParam3==NULL)
        {
        pValue = pCalcInfo->m_pfParam1;
                f = *pCalcInfo->m_pfParam2;
        nPeriod=(int)f;
                for(i=nPeriod-1;i<pCalcInfo->m_nNumData;i++)               
                {                                                                                                               
                fTotal = 1.0f;
                for(j=nPeriod-1;j<=i;j++)
                        fTotal *= pValue[j];
                pCalcInfo->m_pResultBuf[i] = fTotal;                       
                }
            return nPeriod;
        }
}



---------------------------另我想再请教大家一个问题。
  fTotal = 0.0f;
  for(j=0;j<nPeriod;j++)          //累加
   fTotal *= pCalcInfo->m_pStkData[i-j].m_fVolume;
  pCalcInfo->m_pResultBuf[i] = fTotal

我想求fTotal的平方根,用什么表达式实现
就是求  fTotal^2


2010-08-17 15:46
ie5054
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2010-8-13
收藏
得分:0 
    float x0,x1,x2,fTo;
    x0=9/2;
    x1=(x0+(9/x0))/2;
    fTo=0.0f;
    do
    {
        x0=x1;
        x1=(x0+(a/x0))/2;
        if((x0-x1)>fTo)
           x2=x0-x1;
        else
           x2=(x0-x1)*-1;
    }
    while(x2>1e-6);
--------------------
比如我想求9的平方根,x1是输出结果。。为何上述公式编译报错?
各位大侠。求教了
2010-08-19 18:51
快速回复:C++菜鸟请教大家如何实现求积?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018155 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved