içinde iki kat daha düşük olan iki sayıdan oluşan En Düşük Ortak Birden Çok Sayısını hesaplamamı isteyen bir Coursera sınıfı için bir ödev yapıyorum. Bunu yazıyorum C ve ben 226553150 ve 1023473145 numaraları ile bir test çantası üzerinde kodumu çalıştırıyorum. Cevap 46374212988031350, ama ben 6 tarafından kapalı olan 46374212988031344, alıyorum!En Düşük Ortak Çoklu C
Python'da, aşağıda yazdığımla esasen aynı yaklaşımı kullanan doğru bir çözüm yazdım, ancak sayısal kesinliğin ayrıntıları benim için açıktı. Ben C içinde yüzen nokta hassaslığı hakkında bir şey öğrenmek için SO göndermek ve LCM ile ilgili internette ve SO üzerinde gördüğüm çoğu soru sadece tamsayılarla anlaşma çünkü.
#include <stdio.h>
#include <math.h>
double gcd(double a, double b) {
if (b == 0) {
return a;
}
return gcd(b, fmod(a,b));
}
double lcm(double a, double b) {
return (a * b)/gcd(a,b);
}
int main() {
double a;
double b;
scanf("%lf %lf", &a, &b);
printf("%.0lf\n", lcm(a,b));
return 0;
}
Bu tür görevlerde kayan nokta hesaplamalarını kullanmayın. Sadece tamsayı kullanın. Yüksek hassasiyete ihtiyacınız varsa uzun süre kullanın (veya uzun süre yeteri kadar büyük değilse keyfi doğruluk aritmetiği) – GMichael
Bu formül '(a * b)/gcd (a, b)' 'çiftin tutabileceğinden daha fazla rakam ile sonuçlanacaktır. . Formülün nasıl geliştirileceğini düşünün ki bu olmayacak. –
çiftinin yalnızca 15 haneli hassasiyeti vardır. 46374212988031350'yi tam olarak –