Mnożenie dużych liczb



Masz problem? Zapytaj na forum elektroda.pl

Poprzedni Następny
Wiadomość
Spis treści
From: "swiniaczek" <swiniaczek_at_nospam_buziaczek.pl>
Subject: Mnożenie dużych liczb
Date: Fri, 28 May 2004 23:40:59 +0200


Witam;
Jak pomnożyć dwie liczby np. 98123456 x 1.000002 = 98123652 za pomocą
rejestrów procesora 8 bitowego.
Przekształcenia na typ "float" nie dadzą rezultatu ( mantyse w IEEE 754
reprezentuje 7 cyfr dziesiętnych)

pozdr.
swiniaczek



========
Path: news-archive.icm.edu.pl!news.gazeta.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: "Zbigniew Jachimowicz" <zbychj_at_nospam_WYTNIJ.gazeta.pl>
Subject: =?ISO-8859-2?Q?Re:_Mno=BFenie_du=BFych_liczb?=
Date: Fri, 28 May 2004 22:49:46 +0000 (UTC)


Witam

Jak pomnożyć dwie liczby np. 98123456 x 1.000002 = 98123652 za pomocą
rejestrów procesora 8 bitowego.

Może tak. A x (1 + 0.000002) = A + A x 0.000002. Mnożysz A przez 2, dzielisz
przez liczbę pozycji po przecinku(10^n) i dodajesz A.

--
Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/

========
Path: news-archive.icm.edu.pl!newsfeed.gazeta.pl!news.onet.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: Milosz Skowyra <mewashek_at_nospam_wp.pl>
Subject: Re: =?iso-8859-2?Q?Mno=BFenie=20du=BFych?= liczb
Date: Sat, 29 May 2004 00:57:06 +0200


swiniaczek wrote:

Witam;
Jak pomnożyć dwie liczby np. 98123456 x 1.000002 = 98123652 za pomocą
rejestrów procesora 8 bitowego.
Przekształcenia na typ "float" nie dadzą rezultatu ( mantyse w IEEE 754
reprezentuje 7 cyfr dziesiętnych)

Cos krecisz. W pojedynczej precyzji wg. IEE754 masz 4 bajty, 1 bit
znaku, 8 bitow cechy i reszta to mantysa. Cecha jest suma wykladnika
potegi liczby 2 i liczby 127 (w celu umozliwienia zapisu liczb
ujemnych), przez ktorą nalezy pomnozyć mantyse, aby otrzymac calą
liczbe. Ergo AFAIR w celu pomnozenia nalezy sprowadzic przez
normalizacje cechy do odpowiedniej pozycji przecinka i dodac mantysy.
Ale moge sie mylic bo to dawno na uczelni mialem. W sieci mnostwo jest
opisow.

--
Regards. Przy odpowiedzi usun "." przed "net" z adresu!!!
|-----------------------------------------------------|
| Milosz Skowyra GSM Mobile +48 600 95 35 72 |
| miloszek_at_nospam_fido.net.org.pl 2:484/2.47 on fidonet |
|-----------------------------------------------------|

========
Path: news-archive.icm.edu.pl!news2.icm.edu.pl!news.onet.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: J.F. <jfox_nospam_at_nospam_poczta.onet.pl>
Subject: Re: Mnożenie dużych liczb
Date: Sat, 29 May 2004 02:41:59 +0200


On Sat, 29 May 2004 00:57:06 +0200, Milosz Skowyra wrote:
Jak pomnożyć dwie liczby np. 98123456 x 1.000002 = 98123652 za pomocą
rejestrów procesora 8 bitowego.
Przekształcenia na typ "float" nie dadzą rezultatu ( mantyse w IEEE 754
reprezentuje 7 cyfr dziesiętnych)

Cos krecisz. W pojedynczej precyzji wg. IEE754 masz 4 bajty, 1 bit
znaku, 8 bitow cechy i reszta to mantysa.

24 bity mantysy - to tak mniej wiecej wlasnie 7 cyfr dziesietnych.

Ale i tak rzad dokladniej niz tu trzeba na to 1.000002 - ale zabraknie
3 bitow na dokladne tych 98 mln.

No coz - trzeba poszukac kompilatora z typem double, albo kombinowac,
albo nie wymyslac zadan ktore procka przerastaja ..

J.


========
Path: news-archive.icm.edu.pl!news2.icm.edu.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: Milosz Skowyra <mewashek_at_nospam_wp.pl>
Subject: Re: =?iso-8859-2?Q?Mno=BFenie=20du=BFych?= liczb
Date: Sat, 29 May 2004 13:51:30 +0200


"J.F." wrote:

Jak pomnożyć dwie liczby np. 98123456 x 1.000002 = 98123652 za pomocą
rejestrów procesora 8 bitowego.
Przekształcenia na typ "float" nie dadzą rezultatu ( mantyse w IEEE 754
reprezentuje 7 cyfr dziesiętnych)
Cos krecisz. W pojedynczej precyzji wg. IEE754 masz 4 bajty, 1 bit
znaku, 8 bitow cechy i reszta to mantysa.
24 bity mantysy - to tak mniej wiecej wlasnie 7 cyfr dziesietnych.

Tia, faktetycznie. Pozostaje podwojna precyzja i mozna zrobic to
identycznie, w koncu operacje na cechach i mantysach generalnie polegaja
na suwaniu bitami to w prawo to w lewo, wiec praktycznie bez znaczenia
czy zrobimy to na 8 bajtach czy na 4.

--
Regards. Przy odpowiedzi usun "." przed "net" z adresu!!!
|-----------------------------------------------------|
| Milosz Skowyra GSM Mobile +48 600 95 35 72 |
| miloszek_at_nospam_fido.net.org.pl 2:484/2.47 on fidonet |
|-----------------------------------------------------|

========
Path: news-archive.icm.edu.pl!news.gazeta.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: "Marcin Zajdel" <marcelowaty_at_nospam_gazeta.pl>
Subject: Re: Mnożenie dużych liczb
Date: Mon, 31 May 2004 11:56:16 +0200


Kompilator o nazwie CrosWare (dla wielu rodzajow prockow) obsluguje typ
Double.
Tylko ze przydalaby sie pelna wersja, nie trialowa (15dni) i bez
ograniczenia dlugosci kodu wynikowego)
Pozdrawiam

--
Z powazaniem
Marcel
#GG: 654827


Użytkownik "J.F." <jfox_nospam_at_nospam_poczta.onet.pl> napisał w wiadomości
news:0lmfb09bh6ce5fic025q3bsib20a183ph4_at_nospam_4ax.com...
> On Sat, 29 May 2004 00:57:06 +0200, Milosz Skowyra wrote:
> >> Jak pomnożyć dwie liczby np. 98123456 x 1.000002 = 98123652 za pomocą
> >> rejestrów procesora 8 bitowego.
> >> Przekształcenia na typ "float" nie dadzą rezultatu ( mantyse w IEEE 754
> >> reprezentuje 7 cyfr dziesiętnych)
> >
> >Cos krecisz. W pojedynczej precyzji wg. IEE754 masz 4 bajty, 1 bit
> >znaku, 8 bitow cechy i reszta to mantysa.
>
> 24 bity mantysy - to tak mniej wiecej wlasnie 7 cyfr dziesietnych.
>
> Ale i tak rzad dokladniej niz tu trzeba na to 1.000002 - ale zabraknie
> 3 bitow na dokladne tych 98 mln.
>
> No coz - trzeba poszukac kompilatora z typem double, albo kombinowac,
> albo nie wymyslac zadan ktore procka przerastaja ..
>
> J.
>



========
Path: news-archive.icm.edu.pl!newsfeed.gazeta.pl!news.astercity.net!news.aster.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: Adam Dybkowski <adybkows_at_nospam_amwaw.edu.pl>
Subject: Re: =?ISO-8859-2?Q?Mno=BFenie_du=BFych_liczb?=
Date: Sat, 29 May 2004 01:02:49 +0200


swiniaczek wrote:

Jak pomnożyć dwie liczby np. 98123456 x 1.000002 = 98123652 za pomocą
rejestrów procesora 8 bitowego.
Przekształcenia na typ "float" nie dadzą rezultatu ( mantyse w IEEE 754
reprezentuje 7 cyfr dziesiętnych)

Nikt ci nie każe zapisywać liczb w standardzie IEEE. Dowolną wielkość
liczb osiągniesz łatwo dokonując przekształceń na ciągach znaków. Akurat
mnożenie jest w miarę proste - tak jakbyś to sam robił zapisując liczby
na kartce. A czy liczba będzie miała 10 cyfr, czy 1000 - to już mało
istotne. Dla uproszczenia sprawy możesz przed mnożeniem skonwertować
obie liczby na całkowite (mnożąc w podanym przypadku przez 10^6) a po
operacji przekształcić spowrotem. Można też mnożyć liczby z przecinkiem
dziesiętnym albo zapisane w inny sposób (np. hex) - wszystko zależy od
twojej inwencji.
BTW: Zdaje się, że standardowy unixowy kalkulator 'bc' właśnie używa
tekstowych operacji na dowolnie wielkich liczbach.

--
Adam Dybkowski
adybkows_at_nospam_amwaw.edu.pl
http://www.amwaw.edu.pl/~adybkows/


========
Path: news-archive.icm.edu.pl!newsfeed.gazeta.pl!news.dialog.net.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: "Piotr Wyderski" <piotr.wyderski_at_nospam_wp.pl>
Subject: Re: Mnożenie dużych liczb
Date: Sat, 29 May 2004 14:13:28 +0200



swiniaczek wrote:

Jak pomnożyć dwie liczby np. 98123456 x 1.000002 = 98123652 za pomocą
rejestrów procesora 8 bitowego.

Za pomoca samych rejestrow bedzie trudno, ale jesli w tym
procesorze jest jeszcze jakis sumator, to nie bedzie z tym
problemu. :-) Sprecyzuj tylko jaka postac maja liczby do
pomnozenia: czy format staloprzecinkowy wystarczy, czy tez
koniecznie potrzebujesz zmiennego przecinka? W obu
przypadkach sprowadzi sie to jednak do pomnozenia dwu duzych
liczb naturalnych, co jest prosta operacja, nawet w podstawowce
ucza jednego z algorytmow mnozenia. Zamiast niej proponuje jednak
algorytm rosyjskich wiesniakow, bo wymaga tylko prostej sekwencji
przesuniec i dodawan.

Pozdrawiam
Piotr Wyderski



========
Path: news-archive.icm.edu.pl!newsfeed.gazeta.pl!news.onet.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai