JavaScript Math() metodları aynı çıktıyı verir mi?

Lotototo

Hectopat
Katılım
21 Eylül 2020
Mesajlar
268
Çözümler
4
Yer
Bodrum
Daha fazla  
Cinsiyet
Erkek
const sayi = Math.floor(Math.random() * 10) + 1;

const sayi2 = Math.ceil(Math.random() * 10)


Bu iki kod aynı çıktıyı mı verir?
Neden?
1 ile 10 arasında (ikisi de dahil olacak şekilde) rastgele bir sayı üretecek kodu nasıl yazmalıyım ?
 
Bu iki kod aynı çıktıyı mı verir?
Her zaman değil. Bilgisayarlar doğrudan rastgele sayı üretemez çünkü bizim gibi düşünebilecek zihinleri yoktur. Bunun yerine bir seed kullanarak "rastgeleleştirilmiş" bir sayı döndürürler. Bu seed genellikle zamandır. Math.random fonksiyonu size zaman seedini kullanarak bir sayı döndürme işini yapar. Yani Math.random'dan dönen değerlerin aynı olma zorunluluğu olmamakla beraber aynı olma ihtimali de vardır.

Math.floor -> Matematikteki taban fonksiyonunun JavaScript'teki karşılığıdır. Yani size girdiğiniz değere eşit veya daha küçük olan ilk tamsayıyı döndürür.

Math.ceil -> Matematikteki tavan fonksiyonunun JavaScript'teki karşılığıdır. Yani size girdiğiniz değere eşit veya daha büyük olan ilk tamsayıyı döndürür.

Bu durumda aldıkları parametre olan Math.random'dan dönen sayı dinamik olduğu için bu fonksiyondan dönecek olan sayı da dinamiktir.
 
const sayi = Math.floor(Math.random() * 10) + 1;

const sayi2 = Math.ceil(Math.random() * 10)


Bu iki kod aynı çıktıyı mı verir?
Neden?
1 ile 10 arasında (ikisi de dahil olacak şekilde) rastgele bir sayı üretecek kodu nasıl yazmalıyım ?
Demek istediğin sanırım şu:

Kod:
const sayi = Math.floor(Math.random() * 10) + 1;

const sayi2 = Math.ceil(Math.random() * 10)

while(sayi2 == sayi)
    sayi2 = Math.ceil(Math.random() * 10)
 
const sayi = Math.ceil(Math.random() * 9) + 1;

const sayi2 = Math.floor(Math.random() * 10) + 1;

Peki bu ikisi aynı şeyi mi ifade ediyor:
1 ile 10 arasında (ikisi de dahil olacak şekilde)
 
const sayi = Math.ceil(Math.random() * 9) + 1;

const sayi2 = Math.floor(Math.random() * 10) + 1;

Peki bu ikisi aynı şeyi mi ifade ediyor:
1 ile 10 arasında (ikisi de dahil olacak şekilde)
Evet, her ikisi de 1 ile 10 arasında (ikisi de dahil olacak şekilde) rastgele bir sayı üretiyor.
 
const sayi = Math.ceil(Math.random() * 9) + 1;

const sayi2 = Math.floor(Math.random() * 10) + 1;

Peki bu ikisi aynı şeyi mi ifade ediyor:
1 ile 10 arasında (ikisi de dahil olacak şekilde)
Aynı olmuyor olması lazım, bir yanlışım varsa düzeltirseniz sevinirim.

Math.ceil() fonksiyonu bir ondalıklı sayıyı yukarıya yuvarlar.
Math.random() ise 0 ile 1 arasında bir ondalıklı sayı üretir.

Math.random() ile elde edilen bir sayı Math.ceil() içerisinde kullanılırsa otomatikmen 1 olmuş oluyor. Örneğin math.random 0.66 değerini üretti math.ceil() bunu 1'e yuvarlıyor. Yani math.random() fonksiyonu hangi sayıyı üretirse üretsin sonuçta sayımız 1 olacak.

console.log(Math.ceil(Math.random()));

komutu ile bunu deneyebilirsiniz çıktı her zaman 1 olmalı.

Bir de en son +1 eklenmiş bu sefer elde edebileceğimiz en küçük sayımız 2 oldu. Yani 2 ile 10 arasında bir sayı (sayılar dahil) elde etmiş oluyoruz ancak diğer satırdaki kodda böyle bir durum yok. Math.floor() fonksiyonu sayıyı aşağıya yuvarlıyor normalde +1 olmasaydı math.random fonksiyonu 0.5 sayısını üretseydi otomatikmen 0 değerini elde edecektik ve 0 ile 10 arasında sayı üretecekti ancak +1 oldugu için 1 ile 10 arasında sayı üretmiş oluyor.
 
Aynı olmuyor olması lazım, bir yanlışım varsa düzeltirseniz sevinirim.

Math.ceil() fonksiyonu bir ondalıklı sayıyı yukarıya yuvarlar.
Math.random() ise 0 ile 1 arasında bir ondalıklı sayı üretir.

Math.random() ile elde edilen bir sayı Math.ceil() içerisinde kullanılırsa otomatikmen 1 olmuş oluyor. Örneğin math.random 0.66 değerini üretti math.ceil() bunu 1'e yuvarlıyor. Yani math.random() fonksiyonu hangi sayıyı üretirse üretsin sonuçta sayımız 1 olacak.

console.log(Math.ceil(Math.random()));

komutu ile bunu deneyebilirsiniz çıktı her zaman 1 olmalı.

Bir de en son +1 eklenmiş bu sefer elde edebileceğimiz en küçük sayımız 2 oldu. Yani 2 ile 10 arasında bir sayı (sayılar dahil) elde etmiş oluyoruz ancak diğer satırdaki kodda böyle bir durum yok. Math.floor() fonksiyonu sayıyı aşağıya yuvarlıyor normalde +1 olmasaydı math.random fonksiyonu 0.5 sayısını üretseydi otomatikmen 0 değerini elde edecektik ve 0 ile 10 arasında sayı üretecekti ancak +1 oldugu için 1 ile 10 arasında sayı üretmiş oluyor.
Bu yuzden Math.random'dan gelen sayiyi 10 ile carparak tam kisminin varolmasini sagliyoruz. Yani 0.66 produce edilirse 6.6 gibi bir sayiyi tavan fonksiyonu ile cagirirsak 7 elde ediyoruz. Taban fonksiyonu ile cagirip 1 eklersek yine 7 oluyor. Yani arada bir fark yok ve her iki kod da 1 ve 10 arasinda sayi uretiyor.
 
Bu yuzden Math.random'dan gelen sayiyi 10 ile carparak tam kisminin varolmasini sagliyoruz. Yani 0.66 produce edilirse 6.6 gibi bir sayiyi tavan fonksiyonu ile cagirirsak 7 elde ediyoruz. Taban fonksiyonu ile cagirip 1 eklersek yine 7 oluyor. Yani arada bir fark yok ve her iki kod da 1 ve 10 arasinda sayi uretiyor.
hem ceil hem +1 kullanıldığı durumda random 0.001 de gelse 1e tamamlamıyor mu, leprosynin dediği gibi min çıktı 1+1 yani 2 olmaz mı?
 

Technopat Haberler

Geri
Yukarı