[C++]Pole koła metodą Monte Carlo

JarTSW
Użytkownik
Użytkownik
Posty: 414
Rejestracja: 15 mar 2007, o 15:15
Płeć: Mężczyzna
Lokalizacja: C:/WINDOWS/pulpit
Podziękował: 104 razy
Pomógł: 11 razy

[C++]Pole koła metodą Monte Carlo

Post autor: JarTSW »

Witam, mam taki programik:

Kod: Zaznacz cały

#include<iostream>
#include<cstdlib>
#include<cstdio>
#include<cmath>
using namespace std;

int main()
{
 int N1=0; 
 int N=100000;
 double x, y;
 cout<<"Pole kola [metoda Monte Carlo]

";
 for(int i=1;i<=N;i++)
 {
     x=(double)rand()/RAND_MAX*2-1;
     y=(double)rand()/RAND_MAX*2-1; 
     if(x*x + y*y <= 1) 
     {
         N1++; 
     }
 }
 cout<<"Liczba punktow w kole: "<<N1
     <<"
Liczba punktow w kwadracie: "<<N
     <<"
Obliczona wartosc PI: "<<4*(double)N1/N
     <<"
Tablicowa wartosc PI: "<<M_PI;
 cout<<"


";       
 system("PAUSE");   
}
Nie rozumiem jednak tego zapisu:

Kod: Zaznacz cały

 x=(double)rand()/RAND_MAX*2-1;
Coś kojarzę, że jest to przesunięcie zakresu generowanych liczb losowych, ale czy mógłby mi to ktoś wytłumaczyć o co w tym chodzi i jak to działa? Bo wiem jaki jest tego efekt, ale chciałbym jeszcze w pełni zrozumieć to działanie...

Pozdrawiam.-- 11 marca 2010, 14:16 --Nieaktualne.
Awatar użytkownika
kadiii
Użytkownik
Użytkownik
Posty: 642
Rejestracja: 20 gru 2005, o 21:04
Płeć: Mężczyzna
Lokalizacja: Wrocław
Pomógł: 130 razy

[C++]Pole koła metodą Monte Carlo

Post autor: kadiii »

Funkcja rand() zwraca wartości od 0 do RAND_MAX. Jeśli podzielisz więc wynik przez RAND_MAX otrzymasz wartości między 0 a 1. Dalej juz chyba oczywiste. Ogólnie jest to zwykłe skalowanie wartości.
ODPOWIEDZ