Randomize Sayılar

6 Mart 2011 by B.Selçuk ÖKSÜZ
Leave a reply »
WP Greet Box icon
Merhaba! Selcukoksuz.com adresine hoş geldiniz. Eğer yeni iseniz ve içeriğimizi takip etmek isterseniz RSS Abonesi Olabilirsiniz.
Mailinize onay mesajı gönderilecektir. Cevaplamayı unutmayınız.

Rasgele Sayilar

dersinde gördüğümüz gibi, kullandığımız time tohumunun ne zaman ne değer üreteceğini kestirmek mümkün. Benim de aklıma hemen pi (3,14159265…) sayısı geldi. Pi asla tekrar etmiyordu. Öyleyse üreteceğimiz rasgele sayının tohumunu pi’den almak çok mantıklıydı. Daha sonra bu konuda biraz araştırayım dedim. Hocamızın da derste bahsettiği gibi bu konu başlı başına bir araştırma konusu. Şimdi sizlerle o araştırmaları paylaşacağım. 

Bu konuda Purdue Üniversitesi‘nden Fizik Profesörü Ephraim Fischbach, yaptığı deneylerin sonucunu şöyle açıklıyor: “Pi sayısının birbirini takip eden basamaklarının rasgeleliğini ölçmek için matematiksel bir method geliştirdik. (Geometric Inner Products (GRID)). GRID ailesinden birçok sayı testlerde kullanıldı, ve pi sayısının sonuçları diğer rasgele sayı üreticileriyle kıyaslandı. Deneyde turbulent electroconvection adı verilen aslı fiziki işleme dayalı bir donanım kullanıldı. Bulduğumuz sonuçlara göre Pi’nin ondalık basamakları rasgele sayı üreticileri için iyi adaylardır ve, pratik bilimlerde ve mühendislik hesaplamalarında kullanılabilirler.”

Bahsedilen rasgele sayı üretme yönteminin Java kodu ise şöyle:

import java.util.*;
public class CalculatePI2
{
	public static boolean isInside (double xPos, double yPos)
	{
		boolean result;
		double distance = Math.sqrt((xPos * xPos) + (yPos * yPos));
		if (distance < 1)
			result = false;
		return(distance < 1);
	}

	public static double computePI (int numThrows)
	{
		Random randomGen = new Random (System.currentTimeMillis());
		int hits = 0;
		double PI = 0;

		for (int i = 0; i <= numThrows; i++)
		{
			double xPos = (randomGen.nextDouble()) * 2 - 1.0;
			double yPos = (randomGen.nextDouble()) * 2 - 1.0;
			if (isInside(xPos, yPos))
			{
				hits++;
			}
			PI = (4 * (hits/numThrows));
		}
		return PI;
	}

	public static void main (String[] args)
	{
		Scanner reader = new Scanner (System.in);
		System.out.println("This program approximates PI using the Monte Carlo method.");
		System.out.println("It simulates throwing darts at a dartboard.");
		System.out.print("Please enter number of throws: ");
		int numThrows = reader.nextInt();
		double PI = computePI(numThrows);
		double Difference = PI - Math.PI;
		System.out.println ("Number of throws = " + numThrows + ", Computed PI = " + PI + ", Difference = " + Difference );
	}
}

Fischbach’ın araştırmasının tamamına ise şuradan ulaşmak mümkün.

Konu Kutluhan METİN tarafından oluşturulmuştur. Araştırması için teşekkür ederim.

Yazar Hakkında

Bilgisayarla yaşamayı bir tarz olarak benimsemiş, teknoloji ile tamamen içli dışlı bir; web tasarımcı, yazılımcı, donanımcı, blog yazarı ve bilgisayar mühendisidir.

B.Selçuk ÖKSÜZ
B.Selçuk ÖKSÜZ kullanıcısının tüm yazıları.

Arama Sorguları

  • sayı çarkı nasıl yapılır (22)
  • randomizasyon nasıl yapılır (17)
Advertisement

Bu Yazıyı Beğendiniz Mi?

0

Bir Cevap Yazın

Sizin Yorumunuz Nedir?

%d blogcu bunu beğendi:
Gizlilik Hakları