🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.programming
Article #216568

Re: Ile zajmie komputerowi mnożenie liczb rzędu 2^128

#216568
From: Piotr Chamera
Date: Wed, 04 Dec 2019 12:02
50 lines
3866 bytes
W dniu 2019-12-04 o 00:19, osobliwy.nick@gmail.com pisze:
> Cześć. Badam pewne funkcje pod kątem zastosowań kryptograficznych. I mam następujący problem. Muszę oszacować ile czasu zajmie mnożenie liczby 2^128-5, z dodawaniem. Konkretnie - w pierwszym kroku obliczamy (2^128-5)*2,5+2,5, następnie dzielimy całość przez 2. A potem znów wynik mnożymy razy 2,5 i dodajemy 2,5. I znów dzielimy wynik przez 2. Musimy w sumie wykonać 128 takich operacji, to jest 64 mnożenia z dodawaniem i 64 dzielenia przez 2.
> 
> Dosyć łatwo wykazać, że liczba końcowa będzie całkowita i każda liczba uzyskana po drodze też będzie całkowita. Ale nie chodzi mi o wynik, tylko o sprawdzenie ile komputerowi zajmie policzenie czegoś takiego.
> 
> Zaznaczę, że dla tak dużych liczb szybko tracona jest precyzja. Jestem laikiem, ale z tego co wiem trzeba do tego albo specjalnych bibliotek albo jakichś własnych rozwiązań do wykonywania obliczeń na tak dużych liczbach (które pewnie będą znacznie wolniejsze, niż dedykowane, specjalne biblioteki, które stworzyli np. naukowcy do różnych zaawansowanych obliczeń).
> 
> Czy ktoś jest w stanie wykonać takie obliczenia i zmierzyć czas? A może możecie podsunąć jakiś sensowny sposób oszacowania tego?
> 

Rzeczywiście wychodzi liczba całkowita, ale dla pojedynczej takiej pętli 
czas jest niemierzalny w tej implementacji lispu

CL-USER> (time
	  (let ((x (- (expt 2 128) 5)))
	   (dotimes (i 64)
	     (setf x (/ (+ (* x 5/2)
			   5/2)
			2)))
	   x))

wynik:

542101086242752217003726400434970855712890620


(LET ((X (- (EXPT 2 128) 5))) (DOTIMES (I 64) (SETF X (/ (+ (* X 5/2) 
5/2) 2))) X)
took 0 microseconds (0.000000 seconds) to run.
During that period, and with 6 available CPU cores,
      0 microseconds (0.000000 seconds) were spent in user mode
      0 microseconds (0.000000 seconds) were spent in system mode
  22,592 bytes of memory allocated.

Dla 1000 powtórzeń pętli mamy

(DOTIMES (N 1000) (LET ((X (- (EXPT 2 128) 5))) (DOTIMES (I 64) (SETF X 
(/ (+ (* X 5/2) 5/2) 2))) X))
took 166,000 microseconds (0.166000 seconds) to run.
        9,762 microseconds (0.009762 seconds, 5.88%) of which was spent 
in GC.
During that period, and with 6 available CPU cores,
      156,250 microseconds (0.156250 seconds) were spent in user mode
            0 microseconds (0.000000 seconds) were spent in system mode
  22,528,064 bytes of memory allocated.

czyli wychodziłoby 166 mikrosekund na takie obliczenie.

Ale trzeba pamiętać, że to jest nieoptymalizowany program w lispie,
na pewno można napisać program, który policzy to szybciej.
Technical Details
Message-ID: <qs878c$luk$1@dont-email.me>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!3.eu.feeder.erje.net!feeder.erje.net!eternal-september.org!feeder.eternal-september.org!reader01.eternal-september.org!.POSTED!not-for-mail
References: <b7426ee8-be56-48fc-9657-da5a18e0729b@googlegroups.com>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!3.eu.feeder.erje.net!feeder.erje.net!eternal-september.org!feeder.eternal-september.org!reader01.eternal-september.org!.POSTED!not-for-mail
From: Piotr Chamera <piotr_chamera@poczta.onet.pl>
Newsgroups: pl.comp.programming
Subject: Re: Ile zajmie komputerowi mnożenie liczb
 rzędu 2^128
Date: Wed, 4 Dec 2019 13:02:20 +0100
Organization: A noiseless patient Spider
Lines: 57
Message-ID: <qs878c$luk$1@dont-email.me>
References: <b7426ee8-be56-48fc-9657-da5a18e0729b@googlegroups.com>
Mime-Version: 1.0
Injection-Date: Wed, 4 Dec 2019 12:02:20 -0000 (UTC)
Injection-Info: reader02.eternal-september.org; posting-host="a89c5efaffd842868cfaa8fd3da806ce"; logging-data="22484"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1/WZZcNRwX+eNS4iuKPS/vG"
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:60.0) Gecko/20100101 Thunderbird/60.9.1
Cancel-Lock: sha1:H1jDUhuC/6dATFRYUXmpMOlFS2E=
In-Reply-To: <b7426ee8-be56-48fc-9657-da5a18e0729b@googlegroups.com>
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit