Здравствуйте, пишу программу, которая генерирует наборы положительных случайных чисел, сумма в каждом из которых равняется единице.
#define _USE_MATH_DEFINES
#include <math.h>
#include <iostream>
#include <stdlib.h>
using namespace std;
void pfromu(double u[],int count,double x[])
{
double S=0;
for (int j=1;j<=count;j++){
x[j-1]=u[j-1];
for (int k;k<=j-1;k++) x[j-1]*=(1-u[k-1]);
S+=x[j-1];
//(1) cout<<"x_"<<j<<"="<<x[j-1]<<endl;
}
x[count]=1-S;
}
int main()
{
int n=3,j;
double p[n],u[n-1],ita;
for (int k=1;k<=200;k++) {
for (j=1;j<=n-1;j++) {
ita=((double)rand())/((double)RAND_MAX);
u[j-1]=1-pow(1.0-ita,(double)1/(n-j));
//(2) cout<<"u"<<u[j-1]<<endl;
// printf(" ");
}
pfromu(u,n-1,p);
for(j=1;j<=n;j++) cout<<p[j-1]<<" ";
cout<<endl;
}
return 0;
}
Проблема в том, что такой вариант программы работает неправильно, в тройках чисел встречаются отрицательные, однако стоит раскомментировать (2), этот эффект исчезает. printf(" ") тоже помогает. Это если использовать g++ "gcc версия 4.3.4 (Gentoo 4.3.4 p.10, pie-10.1.5)"
В Ubuntu ("gcc версия 4.3.3 (Ubuntu 4.3.3-5ubuntu4)") программа вылетает с Segmentation fault с кодом ошибки 139, после раскомментирования (2) - работает правильно
Под Windows ("gcc version 3.4.2 (mingw-special)") программа работает неправильно и с раскомментированным (2), однако ситуация исправляется, если раскомментировать (1).
В чем причина такой нестабильности, ведь команды (1) и (2) вообще ни на что не должны влиять?
p.s. с Си++ знаком очень мало.