!">
🧰 BirAraçtaTüm Araçlar →
BigInt Yayın: 17 Temmuz 2026 8 dk okuma

Büyük Sayılarda Faktöriyel Nasıl Hesaplanır? (BigInt)

10! bile 3.628.800 gibi 7 basamaklı bir sayıya ulaşır; 20!'de bu 19 basamağa, 100!'de ise tam 158 basamağa çıkar. Bu noktada JavaScript'in standart sayı tipi (Number) artık güvenilir değildir. Bu rehberde neden güvenilmediğini, hangi n değerinden itibaren sorun başladığını ve BigInt ile bu sorunun nasıl tamamen çözüldüğünü kod örnekleriyle anlatıyoruz.

Büyük faktöriyellerde neden sorun yaşanır?

Kısa cevap Faktöriyel, üstel fonksiyondan bile daha hızlı büyüyen bir işlemdir: n! yaklaşık (n/e)^n hızında büyür. Bu yüzden n çok küçükken bile sonuç dev boyutlara ulaşır — 20! 19 basamak, 100! 158 basamak, 1000! ise 2568 basamak tutar. Standart bilgisayar sayı tipleri bu boyuttaki tam sayıları kesin olarak saklayamaz; bu yüzden özel bir aritmetik gerekir.

Bu hızlı büyümenin sebebi, faktöriyeldeki her yeni çarpanın kendisinden bir öncekinden büyük olmasıdır. Örneğin 2^n gibi bir üstel fonksiyonda her adımda sabit bir sayı (2) ile çarparsınız; faktöriyelde ise her adımda çarpan da büyür (n ile). Bu fark, faktöriyeli matematikte "süper-üstel" (super-exponential) büyüme sınıfına sokar ve n=20 civarından itibaren sonuçları sıradan sayı tipleri için "büyük sayı" (big number) statüsüne taşır.

Number'ın sınırı: 19! ve 171!

Kısa cevap JavaScript'in Number tipi IEEE 754 çift duyarlıklı kayan nokta biçimini kullanır ve tam sayılarda yalnızca 2^53-1 = 9.007.199.254.740.991'e kadar kesin sonuç garanti eder (Number.MAX_SAFE_INTEGER). 19! bu sınırı aşar ve o noktadan sonra sonuçlar sessizce yuvarlanır. 171!'de ise değer Number'ın üst sınırını (~1,8×10^308) aşar ve doğrudan Infinity döner.

Bu iki eşiği ayırt etmek önemlidir çünkü aralarında ciddi bir fark vardır:

  • 19!'den itibaren (hassasiyet kaybı): Sonuç hâlâ sonlu bir sayı olarak görünür, hatta ilk birkaç basamağı doğru bile olabilir — ama son basamaklarda görünmez yuvarlama hataları oluşur. Bu en tehlikeli durumdur çünkü hata fark edilmeden geçebilir.
  • 171!'den itibaren (taşma / overflow): Sonuç artık bir sayı bile değildir; JavaScript doğrudan Infinity döndürür. Hata bariz olduğu için fark edilmesi daha kolaydır, ama artık hiçbir bilgi taşımaz.
Neden tam olarak 2^53-1? IEEE 754 double formatı, bir sayıyı işaret + üs + 52 bitlik mantis (kesir) ile saklar. Tam sayılar için bu 52 bit + gizli bir öncü bit toplam 53 bit kesin hassasiyet sağlar. 2^53'ten büyük tam sayılar artık birer birer değil, 2'nin katları hâlinde temsil edilebilir — yani aradaki bazı tam sayılar hiç ifade edilemez.

BigInt nedir, faktöriyelde nasıl kullanılır?

Kısa cevap BigInt, JavaScript'in ES2020 ile gelen ve boyut sınırı olmadan kesin tam sayı aritmetiği yapabilen ilkel veri tipidir. Bir sayının sonuna n harfi eklenerek yazılır (ör. 5n). Faktöriyel hesaplamasında her çarpma adımı BigInt operandlarla yapılırsa, sonuç 1 basamaklı da olsa 3000 basamaklı da olsa hiç yuvarlama olmadan tam olarak elde edilir.

BigInt, sayıyı ondalık yerine bilgisayar belleğinde bir dizi (array) hâlinde, gerektiği kadar basamakla saklar. Bu sayede boyut teorik olarak yalnızca kullanılabilir bellekle sınırlıdır — 2^53 gibi katı bir eşik yoktur. Karşılığında, BigInt işlemleri normal Number işlemlerinden biraz daha yavaştır çünkü donanım seviyesinde doğrudan desteklenmez; yazılımsal olarak simüle edilir. Ancak faktöriyel gibi n<1000 mertebesindeki hesaplamalarda bu fark milisaniyeler seviyesinde kalır ve pratikte hissedilmez.

Kod örneği: BigInt ile faktöriyel fonksiyonu

Aşağıdaki fonksiyon, n! değerini BigInt kullanarak kesin olarak hesaplar. Dikkat edilmesi gereken tek nokta, döngüdeki sayaç ve başlangıç değerinin de BigInt (n harfi ile) olmasıdır — Number ile BigInt birbirine doğrudan karıştırılamaz:

// n! değerini BigInt ile kesin hesaplar
function faktoriyelBigInt(n) {
  let sonuc = 1n;  // başlangıç: 0!=1
  for (let i = 2n; i <= BigInt(n); i++) {
    sonuc *= i;
  }
  return sonuc;  // BigInt sonucu döner
}

// Örnek kullanım
faktoriyelBigInt(19);  // 121645100408832000n — tam ve kesin
faktoriyelBigInt(50);  // 65 basamaklı, kesin sonuç

Sonuç bir BigInt olduğundan ekranda göstermeden önce .toString() ile metne çevrilmeli; Number'a dönüştürülürse (Number(sonuc)) hassasiyet yeniden kaybedilir.

Pratik ipucu Basamak sayısını hesaplamak için BigInt sonucunu .toString().length ile ölçebilirsiniz — bu, ondalık yuvarlama içermeyen kesin bir basamak sayısı verir. Stirling yaklaşıklığı (n·ln(n)−n+0,5·ln(2πn)) yalnızca tahmini bir basamak sayısı verdiği için doğrulama amaçlı kullanılmalı, kesin sonuç yerine geçmemelidir.

BigInt hesaplamayı kendiniz deneyin

1'den 1000'e kadar herhangi bir n için BigInt ile üretilmiş tam sonuç, basamak sayısı ve bilimsel gösterim — hepsi saniyeler içinde ve ücretsiz.

Faktöriyel Hesapla →

Number vs BigInt karşılaştırma tablosu

Aşağıdaki tablo, faktöriyel büyüdükçe hassasiyetin nerede kaybolmaya başladığını ve sonunda taşmanın nerede gerçekleştiğini gösterir:

Number tipinin faktöriyeldeki davranışı — kritik eşikler
nBasamak sayısıNumber ile durum
15!13Kesin (güvenli aralıkta)
18!16Kesin (sınıra yakın)
19!18Hassasiyet kaybı başlar
25!26Yuvarlanmış, yanlış son basamaklar
100!158Yuvarlanmış, çoğu basamak hatalı
170!307Sonlu ama tamamen yuvarlanmış
171!310Taşar → Infinity

Basamak sayıları BigInt ile kesin hesaplanmıştır. "Kesin" sütunundaki değerler, karşılaştırma için 0!-12! tam değer tablosunu içeren "Faktöriyel Nedir?" rehberiyle tutarlıdır.

Görüldüğü gibi hassasiyet kaybı ile taşma arasında geniş bir bölge vardır (19!-170!): bu aralıkta Number sonuçları hâlâ "bir sayı" gibi görünür, hatalı olduklarını fark etmek zordur. Bu yüzden faktöriyel gibi hızlı büyüyen işlemlerde n bilinmeden önce her zaman BigInt kullanmak en güvenli yaklaşımdır. Faktöriyelin permütasyon ve kombinasyon gibi nerelerde kullanıldığını görmek isterseniz "Faktöriyelin Matematikte Kullanım Alanları" rehberine göz atabilirsiniz.

1000! gibi çok büyük değerler pratikte neden gerekir?

1000! gibi devasa değerler günlük hayatta doğrudan karşımıza çıkmasa da; kriptografi, olasılık teorisi, büyük kombinatorik problemler (ör. 1000 elemanlı bir kümenin olası tüm sıralamaları) ve sayı teorisi araştırmalarında kesin faktöriyel değerlerine ihtiyaç duyulur. BigInt olmadan bu hesaplamalar ya yapılamaz ya da yalnızca yaklaşık (Stirling) değerlerle yetinilir.

Sık sorulan sorular

JavaScript'te faktöriyel neden büyük sayılarda hatalı sonuç verir?
JavaScript'in standart Number tipi, IEEE 754 çift duyarlıklı kayan nokta biçimini kullanır ve yalnızca 53 bit'lik bir mantisle tam sayıları kesin tutabilir. Bu sınırın karşılığı 2^53-1'dir (9.007.199.254.740.991). n! bu değeri aştığında sonuç yuvarlanmaya başlar ve gerçek değeri temsil etmez.
Number.MAX_SAFE_INTEGER nedir, faktöriyeli nasıl etkiler?
Number.MAX_SAFE_INTEGER, bir tam sayının Number ile kesin temsil edilebileceği en büyük değerdir (2^53-1). 18! bu sınırın altında kalırken 19!=121.645.100.408.832.000 bu sınırı aşar; bu noktadan sonra Number ile yapılan faktöriyel hesapları kesin değildir.
BigInt nedir ve faktöriyel hesaplamada nasıl kullanılır?
BigInt, ES2020 ile gelen, boyut sınırı olmadan kesin tam sayı aritmetiği yapan bir veri tipidir (5n gibi 'n' ekiyle yazılır). Faktöriyel hesabında her çarpma adımı BigInt operandlarıyla yapılırsa sonuç kaç basamaklı olursa olsun tam olarak elde edilir.
En büyük kaçıncı faktöriyel Number ile hesaplanabilir?
Number kabaca 1,8×10^308'e kadar değer tutabildiğinden 170! hâlâ sonlu bir Number olarak görünür, ama kesin değildir çünkü hassasiyet çok daha önce (19! civarında) kaybolmuştur. 171! ise Number'ın üst sınırını aşar ve doğrudan Infinity döner.
BigInt ile faktöriyel hesaplamak performansı yavaşlatır mı?
n<1000 gibi pratik değerlerde BigInt hesaplama modern tarayıcılarda milisaniyeler içinde tamamlanır, fark edilir bir yavaşlama yaratmaz. Maliyet yalnızca çok daha büyük n değerlerinde (binlerce, on binlerce) belirginleşir.

İlgili rehberler

Metodoloji & kaynaklar. Bu yazıdaki tüm sayısal değerler ve basamak sayıları, FaktöriyelHesap'ın açık BigInt hesaplama motoruyla üretilmiştir — ondalık yuvarlama yapılmaz, hiçbir basamak kaybolmaz. Kaynaklar: ECMAScript BigInt spesifikasyonu, IEEE 754 çift duyarlıklı kayan nokta standardı. Son güncelleme: 17 Temmuz 2026. Yazı eğitim ve bilgilendirme amaçlıdır.
Hesaplama motoru: JavaScript BigInt aritmetiği · Klasik kombinatorik tanımları · Güncelleme: 17 Temmuz 2026
Eğitim ve bilgilendirme amaçlıdır. · FaktöriyelHesap