|
Тема |
Re: Сравняване на реални числа [re: Eмил] |
|
Автор | KCV (Нерегистриран) | |
Публикувано | 20.08.03 10:50 |
|
|
"Procedures and functions that need compiler magic"
hehe
не бях обърнал внимание на това
май има за какво да си го крият
аз Рандом най обичам да го тествам
с изчисляване на Монте Крло Пи
това при което се генерират случайни точки
в квадрат и броиш тези които са вътре
във вписана в квадрата окръжност
Броя на всичките към тези дето са вътре е равно на съотношението на лицата
което е кратно на Пи предполагам го знаеш това
Примерно
И както каза за
"има възможно по-голям период на повторение и
по-равномерно разпределение на стойностите. "
та на Борландския
поне до няколко стотин милиона точки Пи бавно се подобряваше
разбира се става вапрос че 5 знак се колебае около 9(+/- 5 ако не се лъжа)
и изведнъж малко над 1 300 000 000
Пи става за момент 0 и се объркват нещата
но не си спомням от къде идваше проблема но май не беше от рандома
Докато с VS C++ нещата са трагични
Някой може да ми възрази че ако е за сериозно сам трябва да си направя
Генератора и да го познавам...и ще е прав но за моите тогавашни неща
Борландския си беше супер
Та зарад тази 0 не мога да кажа колко е максималния брой на членове на редицата на които можеш да се довериш
Даже го изравям кода
procedure TForm1.Button2Click(Sender: TObject);
var i,j,k:Cardinal;
x,y,z,p:extended;
BEGIN
randomize;
k:=0;p:=0;
j:=2000000000 ; // толкова точки ще бъдат генерирани
for i:=1 to j do
begin
x:=random;
y:=random;
z:=x*x+y*y;
if z <1 then k:=k+1;
p:=4*k/i;
if i div 10000000 = (i/10000000) then
Begin
canvas.TextOut(100,40,'i='+inttostr(i) +' PI='+floattostr(p));
application.ProcessMessages;
end;
end;
|
| |
|
|
|