-
Data: 2010-09-23 11:21:38
Temat: Re: Porównywanie ułamków zwykłych
Od: Piotr Chamera <p...@p...onet.pl> szukaj wiadomości tego autora
[ pokaż wszystkie nagłówki ]I jeszcze wersja iteracyjna algorytmu (z komentarzami)
i statystyka liczby iteracji.
PS. Nie irytujcie się, jeśli to nikomu nie potrzebne.
Tak mnie dzisiaj naszło na pisanie nawiasów :)
(defun cmp-rational2 (a b c d)
"Porównanie liczb a/b i c/d przy założeniu, że
a, b, c, d dodatnie oraz b i d różne od 0.
Liczby w obliczeniach pośrednich nigdy nie
są większe od wejściowych. Wersja iteracyjna.
Zwracane wartości:
a/b > c/d => T
a/b < c/d => NIL
a/b = c/d => EQUAL"
(do ((sign T) ; albo NIL - oznacza negację wyniku
c1 r1 c2 r2) ; miejsce na wyniki dzielenia i reszty
(NIL) ; pętla bez końca
;(print (list a b c d) nil) ; drukowanie parametrów pośrednich iteracji
(multiple-value-setq (c1 r1) (truncate a b)) ; dzielenie całkowite
z resztą
(multiple-value-setq (c2 r2) (truncate c d)) ; dzielenie całkowite
z resztą
(cond
; jeśli części całkowite się różnią, to można wyznaczyć znak
nierówności
((> c1 c2) (if sign
(return T)
(return NIL))
; zamiast (if...) można dać (return sign)
)
((< c1 c2) (if sign
(return NIL)
(return T))
; zamiast (if...) można dać (return (not sign))
)
; tu już wiemy, że w tej iteracji części całkowite były równe
; jeśli również reszty są zerowe to badane liczby są równe
((and (zerop r1) (zerop r2)) (return 'EQUAL))
; zmiana parametrów dla następnej iteracji
; a=b, b=reszta(a/b), c=d, d=reszta(c/d) i zmiana znaku
(T (progn (setq sign (not sign)
a b
b r1
c d
d r2))))))
Liczba iteracji (po lewej) i liczba wywołań wymagających tylu iteracji
(po prawej). Próba 100 000 000 losowo generowanych porównań.
(0 67751730)
(1 23792799)
(2 6988131)
(3 1159932)
(4 246927)
(5 48544)
(6 9536)
(7 1927)
(8 396)
(9 66)
(10 10)
(11 2)
Następne wpisy z tego wątku
- 23.09.10 11:21 Wojciech \"Spook\" Sura
- 23.09.10 19:30 Remek
- 23.09.10 19:32 Remek
- 23.09.10 22:49 Marcin Biegan
- 24.09.10 00:09 bartekltg
- 24.09.10 02:15 Mariusz Marszałkowski
Najnowsze wątki z tej grupy
- Arch. Prog. Nieuprzywilejowanych w pełnej wer. na nowej s. WWW energokod.pl
- 7. Raport Totaliztyczny: Sprawa Qt Group wer. 424
- TCL - problem z escape ostatniego \ w nawiasach {}
- Nauka i Praca Programisty C++ w III Rzeczy (pospolitej)
- testy-wyd-sort - Podsumowanie
- Tworzenie Programów Nieuprzywilejowanych Opartych Na Wtyczkach
- Do czego nadaje się QDockWidget z bibl. Qt?
- Bibl. Qt jest sztucznie ograniczona - jest nieprzydatna do celów komercyjnych
- Co sciaga kretynow
- AEiC 2024 - Ada-Europe conference - Deadlines Approaching
- Jakie są dobre zasady programowania programów opartych na wtyczkach?
- sprawdzanie słów kluczowych dot. zła
- Re: W czym sie teraz pisze programy??
- Re: (PDF) Surgical Pathology of Non-neoplastic Gastrointestinal Diseases by Lizhi Zhang
- CfC 28th Ada-Europe Int. Conf. Reliable Software Technologies
Najnowsze wątki
- 2024-12-23 Riga => Specjalista ds. public relations <=
- 2024-12-23 Łódź => Specjalista ds. Sprzedaży <=
- 2024-12-23 Kraków => International Freight Forwarder <=
- 2024-12-23 Co nalezy do Cinkciarza, a co do Conotoxia ?
- 2024-12-23 Poznań => Key Account Manager <=
- 2024-12-23 Warszawa => Presales / Inżynier Wsparcia Technicznego IT <=
- 2024-12-23 Rzeszów => Spedytor Międzynarodowy <=
- 2024-12-23 Warszawa => Infrastructure Automation Engineer <=
- 2024-12-23 Białystok => Analityk w dziale Trade Development (doświadczenie z Po
- 2024-12-23 Warszawa => Site Reliability Engineer (SRE) <=
- 2024-12-23 Warszawa => DevOps Engineer <=
- 2024-12-23 Warszawa => Senior Account Manager <=
- 2024-12-23 Katowice => Regionalny Kierownik Sprzedaży (OZE) <=
- 2024-12-23 Katowice => Administrator IT - Wirtualizacja i Konteneryzacja <=
- 2024-12-23 Mińsk Mazowiecki => Spedytor Międzynarodowy <=