3 ** x = 240 işleminde x'i logaritma kullanmadan hesaplatamaz mıyım?

başlıkta yazdığım gibi:

3’ün kaçıncı kuvveti 240’tır? sorusunun cevabını python’da logaritma fonksiyonu kullanmadan hesaplatamaz mıyım?

1 Beğeni

Aslında güzel bir soru. Cevabını ben de merak ediyorum. Bu soru Python ile alakalı değil, matematik ile alakalı. Dolayısıyla matematik kurallarını iyi bilmek gerekiyor. Logaritma nasıl hesaplanıyorsa, algoritmasını da buna göre uygulamak gerekir.

Dolayısıyla aranması gereken anahtar cümle:

How calculate logarithm without calculator?

Birkaç link buldum. Linklerde de görüldüğü gibi, hiç de kolay değil :smile:

1 Beğeni

aslında ben matematikle ilgili değil daha çok python’la alakalı kısmını sormak istemiştim. aşağıdakilere benzer bir çözüm arayışındaydım.

sonuc = [x for x in range (1,10) if 3 ** x == 9]
print(sonuc)
erim = list(range(10))
sonuc = list(filter(lambda x: 3 ** x == 9, erim))
print(sonuc)

bu kodlar çalışıyor ve beklenen sonucu veriyor. fakat;

  1. sonuç bir tamsayı olmadığında range fonksiyonu bu hali ile çalışmıyor. onun yerine aşağıdakini denediğimde de çok uzun bir döngüye girdiği için kodu çalıştırmak makul bir zaman dilimi içinde mümkün olmuyor.

     sonuc = [1000000000000000 * x for x in range(4, 6) if 3 ** 1000000000000000 * x == 240]
     print(sonuc)
    

    not: 3 ** x = 240 için log fonksiyonu kullanarak sonuç 4.988692535003756 çıktığı için range(4,6) aralığını seçtim ve yine python’un verdiği bu sonuç virgülden sonra 15 basamaklı olduğu için x’e katsayı olarak 10 ** 15 verdim.

  2. sonuç verse bile bir aralık belirlemek zorunda olmak yine de sıkıntılı. bu range fonksiyonunu tümden ortadan kaldırarak buna benzer ya da farklı bir ifade logaritma fonksiyonu kullanmadan yazılamaz mı?

Uzun olan (2’lik) for dongusu/list comprehension degil, 3 ** 1000000000000000 islemi.

doğru. :slight_smile: ben o ifadeyi range(4, 6, 0.000000000000001) gibi bir işlemi yapmanın bir yöntemi olarak kullandığım için ve bu haliyle -eğer çalışsa idi- uzun olan döngü olacağı için bunu yapmanın diğer yöntemi olan o yazdığım kodda da uzun süren şeyin döngü olduğu algısı kafamda devam etmiş. :slight_smile:

Sorun hakkında aklıma 2 ihtimal geliyor. (Her zaman 3. bir ihtimal daha vardır :slight_smile: )
1-) Tabanın, istenen deger üssünü bulmak.
2-) Tabanın, istenen degere en yakın üssü bulmak.

Aşağıdaki ikisine de yer verdim. Zaten benim izlediğim her iki yolun da aşağı yukarı mantığı aynı…

1- https://paste.ubuntu.com/p/MNHcdDvgT7/
2- https://paste.ubuntu.com/p/zMMNbRkctp/