Здравствуйте, господа программисты, мне предложили решить такую задачу - в промежутке [0;1] выбираются случайным образом a и b, так что x^2 + a*x - 2*b = 0. Величина k = max(x1,x2). Найти вероятность того что k > 1.
Я реализовал программу на си, которая находит эту вероятность:
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
using namespace std;
long double max(long double x1, long double x2)
{
return x1 > x2 ? x1 : x2;
}
int main()
{
setlocale(LC_ALL, "");
srand(time(NULL));
int n, count, N = 0;
long double a, b, discr, x1, x2;
cout << "Введите количество экспериментов:"; cin >> n;
for(int i = 1; i <= n; i++)
{
a = double(rand() % 1000000000000) / double(1000000000000);
b = double(rand() % 1000000000000) / double(1000000000000);
discr = a*a - 8*b;
x1 = (-a + pow(discr, 1.0/2.0))/2.0;
x2 = (-a - pow(discr, 1.0/2.0))/2.0;
if(discr < 0)
continue;
else if( max(x1,x2) > 1 )
{
cout << "При a = " << a << " и b = " << b << " x1 = " << x1 << " x2 = " << x2 << " max = " << max(x1,x2) << endl;
++count;
}
}
printf("\nP(A) = %.10f", float(count) / float(n));
return 0;
}
но даже при миллиарде экспериментов выдает вероятности 0, есть подозрения что проблема в диапозоне случайных чисел, как его расширить?