Merhaba arkadaşlar
pythonda kesirli sayıların modunu nasıl alabiliriz
örn: 2/5 = x mod8 sayısının modu gerçekte (2+8)/5 = 2 iken
python bunu 0,4 olarak veriyor
Merhaba arkadaşlar
pythonda kesirli sayıların modunu nasıl alabiliriz
örn: 2/5 = x mod8 sayısının modu gerçekte (2+8)/5 = 2 iken
python bunu 0,4 olarak veriyor
Sonuç doğru sorun ne?
(2/5) mod 8 alırsan, 0.4 çıkar.
(2+8)/5 yanlış hesaplama.
(2/5)/8 işlemi yapıyorsun.
2/5 = 0,4
0,4 ün mod 8 ini alırsan 8 den küçük olduğundan 0,4 çıkar
(2/5)%8 = 0,4 değişmez. Size ne lazım, ne yapmak istiyorsunuz anlatırsan daha detaylı yardım edebilirim belki.
Abi mod işlemine göre sonuç yanlış oluyor
çünkü
2/5 = x mod8 sayısının cebirsel olarak modu iki şekilde alınır
(2+(modu alınan sayının tam bölen yapan ilk katı burada 8*1 = 8 tam bölen))/5 = 2
((2 mod8) * (5^-1mod8)) (mod8) = 2 * 5 (mod8) = 2
Sen hangi mod işleminden bahsediyorsun?
0.4’ün 8’e bölümünden kalan yine 0.4’tür.
(Bölen * Bölüm) + Kalan = Bölünen
Kalan = Bölünen - (Bölen * Bölüm)
Kalan = Bölünen - (Bölen * (Bölünen // Bölen))
Kalan = 2/5 - (8 * (2/5 // 8))
Kalan = 2/5
Düz mantıkla bakarsak bende sizinle aynı şekilde düşünüyorum
Ama 0,4 yani 2/5 ondalıklı(kesirli) bir sayı olduğu için modüler aritmetiğe göre sonuç 0,4 değil “2” olmalı
Ama düz mantıkla bakarsak
(4/3)^-43 = (3/4)^43 = 0.0000042426218651 mod(5) = 0 (mod5) buda yanlış sonuç
Cahilliğimi mazur görün, sayenizde yeni bir şey öğrendim.
Üssüz kesirli sayılar için şöyle basit bir fonksiyon oluşturabilirsiniz.
def mod(numerator, denominator, divisor):
while (numerator / denominator) != (numerator // denominator):
numerator += divisor
return (numerator / denominator)
print(mod(2, 5, 8))
# >>> 2.0
ESTAĞFURULLAH ABİ NE CAHİLLİĞİ,
OLUŞTURDUĞUNUZ FONKSİYON İÇİN TEŞEKKÜR EDERİM.
KESİR ÜSLÜ OLUNCA FONKSİYON HATA VERİYOR
HATTA SAYILARI DEĞİŞTİRİNCE ÜSLÜ OLMASA BİLE YİNE HATA VERİYOR
ÖRNEĞİN 147/6 MOD19 SONUÇ 15 OLMASI GEREKİRKEN SONUCU 34 YANİ 15+19 OLARAK VERİYOR
77/2 MOD17 SONUCUN 13 OMASI GEREKİRKEN 47 VERİYOR 13+17+17
ACABA PYTHON İÇİNDE GÖMÜLÜ “%” OPERATÖRÜ GİBİ VS BİR KOMUT VARMI ?
Evet soruya böyle başladık. Kesirli modüler artimetik sorusu gibi ve tahminen modul operatöründen ne beklediğini ve ne elde ettiğini tahmin ettim.
Adının modül operatörü olması tüm cebirsel modül alma işlemlerini yapabileceği anlamına gelmez. Benzer sorunları, toplama çarpma bölme önceliklerinde de yaşayabilirsin.
Bu nedenle asıl sorunu öğrenmem gerekiyordu.
Aklıma gelen başıma geldi. Soru, rasyonel sayıların negatif üstlerinin hesaplanmasına kadar geldi.
Doğrudan bu işlemi yapabilen bir operatör yok, belki araştırırsan, biri bir kütüphane fonksiyonu yazmış olabilir ve ona denk gelebilirsin.
Expressing a fraction as a natural number under modulo ‘m’ - GeeksforGeeks
Buradaki örneği;
Senin (2/5) mod 8 e göre değer atayarak vereyim.
# Python3 implementation of the approach
m = 8
# Function to return the GCD
# of given numbers
def gcd(a, b):
if (a == 0):
return b
return gcd(b % a, a)
# Recursive function to return (x ^ n) % m
def modexp(x, n):
if (n == 0) :
return 1
elif (n % 2 == 0) :
return modexp((x * x) % m, n // 2)
else :
return (x * modexp((x * x) % m,
(n - 1) / 2) % m)
# Function to return the fraction modulo mod
def getFractionModulo(a, b):
c = gcd(a, b)
a = a // c
b = b // c
# (b ^ m-2) % m
d = modexp(b, m - 2)
# Final answer
ans = ((a % m) * (d % m)) % m
return ans
# Driver code
if __name__ == "__main__":
a = 2
b = 5
print ( getFractionModulo(a, b))
Bu kod rasyonel sayıların cebirsel modül işlemi için kullanılabilir.
Bunun üzerinden üstlü hesaplamalarına da ulaşabilirsin belki.
Abi teşekkür ederim
Gayet güzel çalışıyor
Orijinal soruyu/odevi gorme istememizin bir nedeni bu tur hatalar.
Burada (4/3)^(-43) ≡ x (mod 5) diyor, = degil. Buradaki iliski congruence, esitlik degil. “mod 5” de congruence sinifi, modulus operatoru degil.
Moduler aritmetige gore sonuc 0.4. Biz congruent tamsayi ariyoruz:
2 * 5^-1 ≡ x (mod 8)
2 * modinv(5, 8) ≡ x (mod 8)
(2%8 * modinv(5, 8)%8) % 8 = x
Abi cevabınız için teşekkür ederim
yavaş yavaş bu programı da çözeceğiz inş