2013-01-31 18 views
0

我正试图计算在给定数量的期间后投资返回正值的总概率。我已经完成了概率已经有一段时间了,所以我不记得那一切。我做对了吗?我得到相当低的数字。我正在用Java中的这段代码正确计算概率吗?

double totalProbPos = 1; 
for (int i = 0; i < maxPeriods; i++) { 
    totalProbPos *= (probPos/100); 
} 
totalProbPos = round(totalProbPos); 
System.out.println("\nThe probability that your investment will return positive after " + maxPeriods + " periods is: \n " + totalProbPos + "%."); 

其中:maxPeriods, probPos由用户给出。

+3

你确定它不是'* = 1 - probPos/100.0'吗?你也可以跳过循环,只计算double totalProbPos =(1 - probPos/100.0)^ maxPeriods'。 – Blender

+0

你可以链接到公式例如wiki – AlexWien

+0

@Blender我刚刚尝试'Math.pow((1 - probPos/100),maxPeriods);'但现在它更低。我正在用'probPos = 54;'来测试,现在我得到了0.002004%的结果,这是不对的,因为当我运行模拟时,我得到的肯定比很多次要多得多。 –

回答

0
totalProbPos *= (probPos/100); 

这是更好地投下一个操作数增加一倍,以避免integer divison问题(假设你关心小数点)

totalProbPos *= ((double)probPos/100); 
0

我想(与强调“猜”)的解决这个问题的方法是尝试在最后时间得出投资回报的概率分布。然后你可以找到返回值大于零的概率(即概率密度从0到无穷大的积分)。结束时返回的概率分布可能类似于高斯(正态)分布,或者它可能是离散状态的分布,如马尔科夫链给出的。也许最初的问题陈述有一些信息可以帮助人们找出该做什么。