Discussion:
funkcja "odwrotna" do silni
(Wiadomość utworzona zbyt dawno temu. Odpowiedź niemożliwa.)
Zawias
2005-10-06 13:00:10 UTC
Permalink
witam,
potrzebuję kodu, który wyliczyłby mi jakiej liczby silnią jest liczba X
domyślam się, że taka pętla (bo chyba coś takiego trzeba będzie
stworzyć) może trwać długo i wywalić overflow, ale nie o to chodzi
po prostu chcę zobaczyć jak wygląda taka procedura (funkcja?) - chcę w
oparciu o to tworzyć swoje modyfikacje
jeśli ktoś zrobił coś takiego, proszę o zaprezentowanie
dzięki
--
pzdr
Zawias
(uwaga - adres w naglowku przekrecony o 13)
Nguyen Bang Giang
2005-10-06 13:54:55 UTC
Permalink
Post by Zawias
witam,
potrzebuję kodu, który wyliczyłby mi jakiej liczby silnią jest liczba X
domyślam się, że taka pętla (bo chyba coś takiego trzeba będzie
stworzyć) może trwać długo i wywalić overflow, ale nie o to chodzi
po prostu chcę zobaczyć jak wygląda taka procedura (funkcja?) - chcę w
oparciu o to tworzyć swoje modyfikacje
jeśli ktoś zrobił coś takiego, proszę o zaprezentowanie
dzięki
i=2
Do While Silnia >= i
Silnia0 = Silnia / i
Silnia = Int(Silnia0)
i = i + 1
If (Silnia <> Silnia0) Or (Silnia < i) Then
MsgBox "Niepoprawna ..."
Exit Do
Elseif Silnia = i then
Liczba = i
Exit Do
End If
Loop
Zawias
2005-10-06 14:02:24 UTC
Permalink
Post by Nguyen Bang Giang
i=2
Do While Silnia >= i
Silnia0 = Silnia / i
Silnia = Int(Silnia0)
i = i + 1
If (Silnia <> Silnia0) Or (Silnia < i) Then
MsgBox "Niepoprawna ..."
Exit Do
Elseif Silnia = i then
Liczba = i
Exit Do
End If
Loop
Bardzo dziękuję.
Czekając na odpowiedź napisałem coś takiego:

Private Sub S_AfterUpdate()
Dim N As Double
Dim Str As String
Str = 1
For N = 0 To S
Str = Str & "*" & (N + 1)
If Val(Str) = S Then
S_Silnia = N + 1
Exit Sub
End If
Next N
MsgBox "Ta silnia nie ma swojej podstawy", vbOKOnly
End Sub

no i pętla nie zatrzymuje się mimo, że "przelatuje" przez właściwą wartość
może zmienna Str nie "wylicza się"? podpowiesz mi?
bo jeśli nie, to skorzystam z Twojego rozwiązania :)
thx
--
pzdr
Zawias
(uwaga - adres w naglowku przekrecony o 13)
Marcin Miga
2005-10-06 14:24:28 UTC
Permalink
Post by Zawias
Bardzo dziękuję.
Private Sub S_AfterUpdate()
Dim N As Double
Dim Str As String '*1
Str = 1 '*2
For N = 0 To S '*3
Str = Str & "*" & (N + 1) '*4
If Val(Str) = S Then '*5
S_Silnia = N + 1 '*6
Exit Sub
End If
Next N
MsgBox "Ta silnia nie ma swojej podstawy", vbOKOnly
End Sub
no i pętla nie zatrzymuje się mimo, że "przelatuje" przez właściwą
wartość może zmienna Str nie "wylicza się"? podpowiesz mi?
bo jeśli nie, to skorzystam z Twojego rozwiązania :)
łomatkoboska!
Kurde, a myślałem, że jeden z moich 'wspólpracowników' jest "miszczem"
w zaciemnianiu kodu... Bijesz go na głowę, bo jego kod działa...
*1 i *2 - definiujesz zmienną typu String, a wrzucasz tam Inta
(niepotrzebne rzutowanie)
*3 S jest prawdopodobnie polem tekstowym, więc kolejne rzutowanie
niepotrzebne zresztą i w wielu przypadkach nieudane S= "ala"
*4 to ci wynalazek! w 0-wym kroku pętli otrzymasz Str="1*1",
Val(Str)=1, więc 1<>"1*1" - kolejne rzutowanie niepotrzebne (*5)
S_Silnia to chyba kolejne pole tekstowe - zaznaczyłem, bo zmienna
niezdefiniowana...

Broń mnie Panie Boże przed takimi programistami. Amen.

pozdrawiaMM
--
Marcin M. Miga
"Wczoraj sędzia usunął z boiska za pomocą czerwonej kartki kawałek
szkła"
Zawias
2005-10-06 17:58:56 UTC
Permalink
Post by Marcin Miga
łomatkoboska!
Kurde, a myślałem, że jeden z moich 'wspólpracowników' jest "miszczem"
w zaciemnianiu kodu... Bijesz go na głowę, bo jego kod działa...
*1 i *2 - definiujesz zmienną typu String, a wrzucasz tam Inta
(niepotrzebne rzutowanie)
*3 S jest prawdopodobnie polem tekstowym, więc kolejne rzutowanie
niepotrzebne zresztą i w wielu przypadkach nieudane S= "ala"
*4 to ci wynalazek! w 0-wym kroku pętli otrzymasz Str="1*1",
Val(Str)=1, więc 1<>"1*1" - kolejne rzutowanie niepotrzebne (*5)
S_Silnia to chyba kolejne pole tekstowe - zaznaczyłem, bo zmienna
niezdefiniowana...
Broń mnie Panie Boże przed takimi programistami. Amen.
Dziękuję za krytykę.
Jestem ekonomistą i pracuję jako analityk finansowy. Informatyką zajmuję
się jako hobby i od czasu do czasu - kiedy potrzebuję narzędzia pracy
(dla mnie bądź innych) - siadam przed Accessem i próbuję coś napisać.
Nikt mnie nigdy nie uczył programowania, ani Accessa, a jednak przy
pomocy Grupy (wielkie dzięki zwłaszcza dla KN) udaje mi się tworzyć coś,
co działa i jestem zadowolony. Czasem moje aplikacje wykorzystywane są w
całej firmie i ludzie są zadowoleni. Moje kody czasem wykonują się
bardzo długo, są nieczytelne (nawet dla mnie), czasem się wykrzaczają
(wówczas siadam i szukam, aż usunę błąd - tu znów chwała Grupie).
Kod, który urodziłem powyżej, nie wzbudza we mnie tak silnych emocji jak
u Ciebie. Nie jestem nawet w 1% tak biegły jak Ty i może właśnie dlatego
nadal nie rozumiem, gdzie tkwi błąd. Chodzi mi tylko o metodologię -
jeśli w zerowym kroku pętli otrzymam Str="1*1", to primo Val(Str)=1,
secundo 1 w iloczynie nie wpłynie na wynik, n'est-ce pas?
I tak, gdy pytam o podstawę silni dla 6, to otrzymuję Str="1*1*2*3",
tak? To dlaczego Val(Str) nie zwraca mi wartości 6 i nie zatrzymuje pętli?
Docenię, jeśli będziesz łaskaw odpowiedzieć w sposób bardziej zrozumiały
dla nieprogramisty i bez zbędnego teatru nt. "miszczów".
--
pzdr
Zawias
(adres przekrecony o 13)
Zawias
2005-10-06 14:23:04 UTC
Permalink
Post by Nguyen Bang Giang
i=2
Do While Silnia >= i
Silnia0 = Silnia / i
Silnia = Int(Silnia0)
i = i + 1
If (Silnia <> Silnia0) Or (Silnia < i) Then
MsgBox "Niepoprawna ..."
Exit Do
Elseif Silnia = i then
Liczba = i
Exit Do
End If
Loop
a jakie typy danych przydzielić zmiennym?
bo nie liczy mi (dla variant albo double) już dla 21!
--
pzdr
Zawias
(uwaga - adres w naglowku przekrecony o 13)
Nguyen Bang Giang
2005-10-06 14:33:28 UTC
Permalink
Post by Zawias
a jakie typy danych przydzielić zmiennym?
bo nie liczy mi (dla variant albo double) już dla 21!
Public Function xxx(silnia As Integer)
i = 2
Do While silnia >= i
silnia0 = silnia / i
silnia = Int(silnia0)
i = i + 1
If (silnia <> silnia0) Or (silnia < i) Then
MsgBox "Niepoprawna ..."
Exit Do
ElseIf silnia = i Then
xxx = i
Exit Do
End If
Loop
End Function

xxx(6) = 3
xxx(21) = MsgBox("Niepoprawna ...")
Zawias
2005-10-06 14:37:03 UTC
Permalink
Post by Nguyen Bang Giang
Post by Zawias
a jakie typy danych przydzielić zmiennym?
bo nie liczy mi (dla variant albo double) już dla 21!
Public Function xxx(silnia As Integer)
i = 2
Do While silnia >= i
silnia0 = silnia / i
silnia = Int(silnia0)
i = i + 1
If (silnia <> silnia0) Or (silnia < i) Then
MsgBox "Niepoprawna ..."
Exit Do
ElseIf silnia = i Then
xxx = i
Exit Do
End If
Loop
End Function
xxx(6) = 3
xxx(21) = MsgBox("Niepoprawna ...")
nie rozumiem :(
przecież 21! to 51 090 942 171 709 400 000 (jako rzecze Excel)
i właśnie dla tej liczby nie podaje mi "podstawy" (dla 20! jeszcze podaje)
p.s. no i poproszę jeszcze o opinię nt. mojej propozycji kodu :)
--
pzdr
Zawias
(uwaga - adres w naglowku przekrecony o 13)
Nguyen Bang Giang
2005-10-06 15:37:32 UTC
Permalink
Post by Zawias
nie rozumiem :(
przecież 21! to 51 090 942 171 709 400 000 (jako rzecze Excel)
Funkcja miała liczyć odwrotnie, czyli jak podałem xxx(n!) = n
21 w tym przypadku jest argumentem, nie wynikiem.
Post by Zawias
p.s. no i poproszę jeszcze o opinię nt. mojej propozycji kodu :)
Twoja propozycja jest fatalna. Zdaje się, że Marcin coś szerzej pisał na
ten temat.
Zawias
2005-10-07 10:08:26 UTC
Permalink
Post by Nguyen Bang Giang
Twoja propozycja jest fatalna. Zdaje się, że Marcin coś szerzej pisał na
ten temat.
Trochę mnie zastanowiło, że nikt nie chce poprawić mojego kodu -
przejrzałem go ponownie i stwierdziłem, że jednak jest w miarę logiczny.
Postanowiłem się sam pogłowić i okazało się, że należało usunąć 4 znaki
(&,",",&) - i wszystko. Nie mógł mnie ktoś poprawić tak jak prosiłem?
Potrzebny był ten teatr?
Ponieważ bardzo rzadko "programuję", toteż nauka idzie mi również bardzo
opornie.
Obecnie kod wygląda następująco (i działa do 20!, później jest overflow):

Private Sub Silnia_AfterUpdate()
Dim Silnia_Z As Double
Dim Silnia_Z2 As Double
Dim N As Double
Dim Str As Double
Silnia_Z = Me!Silnia
Str = 1
For N = 0 To Silnia_Z
Str = Str * (N + 1)
Silnia_Z2 = Str
If Silnia_Z = Silnia_Z2 Then
Me!AntySilnia.Value = N + 1
Exit Sub
End If
Next N
MsgBox "Ta silnia nie ma swojej podstawy", vbOKOnly
End Sub

Silnia i AntySilnia na formie, to pola tekstowe.
--
pzdr
Zawias
(uwaga - adres w naglowku przekrecony o 13)
Nguyen Bang Giang
2005-10-07 13:52:48 UTC
Permalink
Post by Zawias
Trochę mnie zastanowiło, że nikt nie chce poprawić mojego kodu -
przejrzałem go ponownie i stwierdziłem, że jednak jest w miarę logiczny.
Postanowiłem się sam pogłowić i okazało się, że należało usunąć 4 znaki
(&,",",&) - i wszystko. Nie mógł mnie ktoś poprawić tak jak prosiłem?
Potrzebny był ten teatr?
Przepraszam, ostatnio jestem potwornie zajęty. Własnych postów nie
dopilnuję. Funkcja jest prosta, algorytm do niej też jest bardzo prosty.
Wydaje się, że w poprzednim kodzie konwertujesz tekstowy ciąg wyrażenia w
celu uzyskania wyniku liczbowego co jest bardzo niewydajne. Jeśli chodzi o
overflow to cała zabawa tkwi w właściwościach typów stosowanych w Accessie,
o czym koledzy odpisali bardzo dokładnie.
Post by Zawias
Private Sub Silnia_AfterUpdate()
Dim Silnia_Z As Double
Dim Silnia_Z2 As Double
Dim N As Double
Dim Str As Double
Silnia_Z = Me!Silnia
Str = 1
For N = 0 To Silnia_Z
Str = Str * (N + 1)
Silnia_Z2 = Str
If Silnia_Z = Silnia_Z2 Then
Me!AntySilnia.Value = N + 1
Exit Sub
End If
Next N
MsgBox "Ta silnia nie ma swojej podstawy", vbOKOnly
End Sub
Silnia i AntySilnia na formie, to pola tekstowe.
Ja tego nie bardzo rozumiem. Nie sądziłbym, aby to był logiczny kod. Jest
bardzo wysokie prawdopodobieństwo, że w każdym wykonywaniu kodu, funkcja
musi dokonywać mnożenia do końca (Me!Silnia razy).

Pozdrawiam.
Zawias
2005-10-07 14:20:30 UTC
Permalink
Nguyen Bang Giang napisał(a):
(...)
Post by Nguyen Bang Giang
Ja tego nie bardzo rozumiem. Nie sądziłbym, aby to był logiczny kod. Jest
bardzo wysokie prawdopodobieństwo, że w każdym wykonywaniu kodu, funkcja
musi dokonywać mnożenia do końca (Me!Silnia razy).
Rozumiem - faktycznie jest to niewydajny kod.
Jeszcze raz dzięki za podpowiedzi.
--
pzdr
Zawias
(uwaga - adres w naglowku przekrecony o 13)
BraZby
2005-10-06 16:03:52 UTC
Permalink
Post by Zawias
Post by Nguyen Bang Giang
Post by Zawias
a jakie typy danych przydzielić zmiennym?
bo nie liczy mi (dla variant albo double) już dla 21!
Public Function xxx(silnia As Integer)
i = 2
Do While silnia >= i
silnia0 = silnia / i
silnia = Int(silnia0)
i = i + 1
If (silnia <> silnia0) Or (silnia < i) Then
MsgBox "Niepoprawna ..."
Exit Do
ElseIf silnia = i Then
xxx = i
Exit Do
End If
Loop
End Function
xxx(6) = 3
xxx(21) = MsgBox("Niepoprawna ...")
nie rozumiem :(
przecież 21! to 51 090 942 171 709 400 000 (jako rzecze Excel)
i właśnie dla tej liczby nie podaje mi "podstawy" (dla 20! jeszcze podaje)
p.s. no i poproszę jeszcze o opinię nt. mojej propozycji kodu :)
[...]

to spróbuj zadeklarować jak niżej; - wtedy zwraca poprawnie do 32:

Public Function xxx(Silnia As Double) '
Dim i As Long
Dim silnia0 As Double

i = 2
Do While Silnia >= i

[...]
--
Pozdrowienia
BraZby
Zawias
2005-10-06 18:01:40 UTC
Permalink
Post by BraZby
[...]
Public Function xxx(Silnia As Double) '
Dim i As Long
Dim silnia0 As Double
i = 2
Do While Silnia >= i
[...]
no tak - jasne, dziękuję, działa
--
pzdr
Zawias
(adres przekrecony o 13)
Krzysztof Naworyta
2005-10-06 15:51:07 UTC
Permalink
Zawias <***@tnmrgn.cy> napisał:
| witam,
| potrzebuję kodu, który wyliczyłby mi jakiej liczby silnią jest liczba
| X domyślam się, że taka pętla (bo chyba coś takiego trzeba będzie
| stworzyć) może trwać długo i wywalić overflow, ale nie o to chodzi
| po prostu chcę zobaczyć jak wygląda taka procedura (funkcja?) - chcę w
| oparciu o to tworzyć swoje modyfikacje
| jeśli ktoś zrobił coś takiego, proszę o zaprezentowanie

Function silnia(i As Integer)
If i = 1 Then
silnia = 1
Else
silnia = CDec(silnia(i - 1) * i)
End If
End Function

Function antysilnia(ByVal k)
Dim i As Integer

Do Until k = 1
i = i + 1
k = k / i
If k - Int(k) > 0 Then
antysilnia = -1
Exit Function
End If
Loop
antysilnia = i

End Function

działa do 27!
Powyżej tej liczby dzielenie musisz robić samodzielnie, tak jak Cię uczono w
szkole, słupkowo

--
KN
BraZby
2005-10-06 16:56:24 UTC
Permalink
Post by Krzysztof Naworyta
| witam,
| potrzebuję kodu, który wyliczyłby mi jakiej liczby silnią jest liczba
| X domyślam się, że taka pętla (bo chyba coś takiego trzeba będzie
| stworzyć) może trwać długo i wywalić overflow, ale nie o to chodzi
| po prostu chcę zobaczyć jak wygląda taka procedura (funkcja?) - chcę w
| oparciu o to tworzyć swoje modyfikacje
| jeśli ktoś zrobił coś takiego, proszę o zaprezentowanie
Function silnia(i As Integer)
If i = 1 Then
silnia = 1
Else
silnia = CDec(silnia(i - 1) * i)
End If
End Function
Function antysilnia(ByVal k)
Dim i As Integer
Do Until k = 1
i = i + 1
k = k / i
If k - Int(k) > 0 Then
antysilnia = -1
Exit Function
End If
Loop
antysilnia = i
End Function
działa do 27!
Powyżej tej liczby dzielenie musisz robić samodzielnie, tak jak Cię uczono w
szkole, słupkowo
[...]


Takie coś:

MsgBox antysilnia(silnia(32))

zadziała do 32, jeżeli usuniesz konwersję na CDec,

Function silnia(i As Integer)
If i = 1 Then
silnia = 1
Else
'silnia = CDec(silnia(i - 1) * i)
silnia = silnia(i - 1) * i
^^^^^^^^^^^^^^^^^^^'
End If
End Function

czyli antysilnia(...) działa do 32, tylko obliczene silni nie dziaało
prawidłowo.
--
Pozdrowienia
BraZby
BraZby
2005-10-06 19:13:11 UTC
Permalink
Post by BraZby
Post by Krzysztof Naworyta
| witam,
| potrzebuję kodu, który wyliczyłby mi jakiej liczby silnią jest liczba
| X domyślam się, że taka pętla (bo chyba coś takiego trzeba będzie
| stworzyć) może trwać długo i wywalić overflow, ale nie o to chodzi
| po prostu chcę zobaczyć jak wygląda taka procedura (funkcja?) - chcę w
| oparciu o to tworzyć swoje modyfikacje
| jeśli ktoś zrobił coś takiego, proszę o zaprezentowanie
Function silnia(i As Integer)
[...]
Post by BraZby
Post by Krzysztof Naworyta
End Function
Function antysilnia(ByVal k)
[...]
Post by BraZby
Post by Krzysztof Naworyta
End Function
działa do 27!
Powyżej tej liczby dzielenie musisz robić samodzielnie, tak jak Cię
uczono
Post by BraZby
w
Post by Krzysztof Naworyta
szkole, słupkowo
[...]
MsgBox antysilnia(silnia(32))
zadziała do 32, jeżeli usuniesz konwersję na CDec,
Function silnia(i As Integer)
If i = 1 Then
silnia = 1
Else
'silnia = CDec(silnia(i - 1) * i)
silnia = silnia(i - 1) * i
^^^^^^^^^^^^^^^^^^^'
End If
End Function
[...]

po krótkich testach okazało się, że zadziała do 32,
ale nie działa dla 24.
'^^^^^^^^^^^^^^^

Działa także powyżej 32, ale wybiórczo dla:
37, 44, 61, 62, 67, 68, 72, 74, 75, 99, 102, 145, 167
dla n = 171 generowany jest błąd !

Sprawdza się do 32 po drobnej modyfikacji:
'___________________________________
Function Silnia(n As Byte)

If n < 2 Then
Silnia = 1
Exit Function
End If

'lub If n = 24 Then
If n < 27 Then
Silnia = CDec(Silnia(n - 1) * n)
Else
Silnia = CDbl(Silnia(n - 1) * n)
End If

End Function

no cóż, taki to urok liczb zmiennoprzecinkowych

a dla dla n=24, wychodzi taki dziwadło:

CDec Silnia = 6,20448401733239E+23
Double Silnia = 6,20448401733239E+23
i róznica = 0

a antysilnia tylko dla pierwszej wartości zwraca prawidłową wartość ???
--
Pozdrowienia
BraZby
Krzysztof Naworyta
2005-10-06 19:22:37 UTC
Permalink
Juzer BraZby <***@BEZTEGOpoczta.onet.pl> napisał

|| MsgBox antysilnia(silnia(32))
|| zadziała do 32, jeżeli usuniesz konwersję na CDec,

| a dla dla n=24, wychodzi taki dziwadło:
|
| CDec Silnia = 6,20448401733239E+23
| Double Silnia = 6,20448401733239E+23
| i róznica = 0
|
| a antysilnia tylko dla pierwszej wartości zwraca prawidłową wartość ???

BraZby, umówmy się, że owe funkcje działają względnie dobrze w zakresie
long/decimal
Potem to już na własne ryzyko !
A przecież dla czegoś takiego jak n! zakresy long czy long^2 to bajecznie
małe liczby !

Swego czasu, jeszcze studentem bywszy, zachwycałem się algorytmem na
uzyskanie liczby Pi z dowolną dokładnością.
Jak ją uzyskać ? Łatwo ! Wystarczy wrócić do podstawówki i nie wierzyć
komputerowym procesorom !

Najdokładniejsza (?) decimal nijak ma się do absolutnego wyniku
matematycznego! Najczęściej ten wynik trzeba wyliczyć operując na
stringach a dopiero potem na liczbach !

A teraz jeszcze wymyśl to, co robią codziennie CIA i KGB: algorytm
znalezienia najdalszej liczby pierwszej !
--
KN
(MVP, M$ Office Access)

archiwum grupy:
http://groups.google.pl/advanced_group_search
(grupa: pl*msaccess)
BraZby
2005-10-06 20:00:09 UTC
Permalink
Post by Krzysztof Naworyta
|| MsgBox antysilnia(silnia(32))
|| zadziała do 32, jeżeli usuniesz konwersję na CDec,
|
| CDec Silnia = 6,20448401733239E+23
| Double Silnia = 6,20448401733239E+23
| i róznica = 0
|
| a antysilnia tylko dla pierwszej wartości zwraca prawidłową wartość ???
BraZby, umówmy się, że owe funkcje działają względnie dobrze w zakresie
long/decimal
Potem to już na własne ryzyko !
A przecież dla czegoś takiego jak n! zakresy long czy long^2 to bajecznie
małe liczby !
Ja zdaję sobie z tego sprawę, ale może komuś się to przydać.
Post by Krzysztof Naworyta
Swego czasu, jeszcze studentem bywszy, zachwycałem się algorytmem na
uzyskanie liczby Pi z dowolną dokładnością.
Jak ją uzyskać ? Łatwo ! Wystarczy wrócić do podstawówki i nie wierzyć
komputerowym procesorom !
To dokładnie tak samo jak z równaniem gazu doskonałego.
Zakładasz że cząsteczki są punktowe i oddziaływują doskonale sprężyście
potem tylko N! dla wielkich liczb (w przybliżeniu bodajże Stirlinga -
zwykły logarytm + proste działania matematyczne)
i po kilku linijka masz gotowe równania.
Po co jakieś durne doświadczenia empiryczne.
Post by Krzysztof Naworyta
Najdokładniejsza (?) decimal nijak ma się do absolutnego wyniku
matematycznego! Najczęściej ten wynik trzeba wyliczyć operując na
stringach a dopiero potem na liczbach !
Krzysztof.

Zauważ jedną rzecz:
Zaczęło się od maksymalnej wartości = 20,
potem było pseudo 32, ale dziurawe dla 24,
skończyło się (wspólnymi siłami) na 32.

Co za dynamika. Czy nie jest to miłe ?
Ja po prostu lubię czasami takie rozrywki ;-)
Post by Krzysztof Naworyta
A teraz jeszcze wymyśl to, co robią codziennie CIA i KGB: algorytm
znalezienia najdalszej liczby pierwszej !
No widzisz, a inne służby myślą jak dany obiekt poćwiartować
na trzy nierówne połowy.
--
Pozdrowienia
BraZby
Krzysztof Naworyta
2005-10-06 20:22:34 UTC
Permalink
Juzer BraZby <***@BEZTEGOpoczta.onet.pl> napisał

| To dokładnie tak samo jak z równaniem gazu doskonałego.
| Zakładasz że cząsteczki są punktowe i oddziaływują doskonale sprężyście
| potem tylko N! dla wielkich liczb (w przybliżeniu bodajże Stirlinga -
| zwykły logarytm + proste działania matematyczne)
| i po kilku linijka masz gotowe równania.
| Po co jakieś durne doświadczenia empiryczne.

Tu, w tym momencie, przytoczę to, co m.in. nauczyła mnie fizyka ...
Żaden wynik nie jest cokolwiek wart, dopóki nie oszacujesz wiarygodnie
jego błędu !

N! powiadacie ?
Sprawdźmy to:

n! = 1x2x3x...x N

Co będzie jeśli to potraktujemy logarytmem ?

Ln(n!) = Suma(ln(i))

Czym jest suma logarytmów kolejnych liczb naturalnych? (w domyśle:
biegnących w nieskończoność) ?
Otóż jest to prosty przepis na całkę !

Ln(n!) = Całka(ln(x))(zakres (0 - n))

a czym jest całka z ln(x) ?
Kto miał profil matematyczny ten wie: x(ln(x)-1)

Czyli dla stosunkowo dużych liczb:

x! = exp(x(ln(x)-1))

tak jakoś ...

Niech ktoś to weźmie w pętlę aby przekonac się jak szybka jest n!
:)))
--
KN
(MVP, M$ Office Access)

archiwum grupy:
http://groups.google.pl/advanced_group_search
(grupa: pl*msaccess)
Marteczek
2005-10-07 20:55:23 UTC
Permalink
Post by Krzysztof Naworyta
Function antysilnia(ByVal k)
Dim i As Integer
Do Until k = 1
i = i + 1
k = k / i
If k - Int(k) > 0 Then
antysilnia = -1
Exit Function
End If
Loop
antysilnia = i
End Function
działa do 27!
Nieprawda! Nie działa całkowicie poprawnie dla k=1 :)
M.
Piotr Lipski
2005-10-07 15:15:18 UTC
Permalink
Post by Zawias
witam,
potrzebuję kodu, który wyliczyłby mi jakiej liczby silnią jest liczba X
[...]

Czytam sobie ten wątek i czytam... :) Jeżeli faktycznie zadowala Cię
antysilnia z wynikiem max. 32, nic prostszego, oto funkcja działająca
poprawnie w zakresie do 100: (uwaga na połamane wiersze...)


Public Function AntySilnia(ByVal strSilnia As String) As Integer
Dim a As String

a = "1;" & _
"2;" & _
"6;" & _
"24;" & _
"120;" & _
"720;" & _
"5040;" & _
"40320;" & _
"362880;" & _
"3628800;"

a = a & "39916800;" & _
"479001600;" & _
"6227020800;" & _
"87178291200;" & _
"1307674368000;" & _
"20922789888000;" & _
"355687428096000;" & _
"6402373705728000;" & _
"121645100408832000;" & _
"2432902008176640000;"

a = a & "51090942171709440000;" & _
"1124000727777607680000;" & _
"25852016738884976640000;" & _
"620448401733239439360000;" & _
"15511210043330985984000000;" & _
"403291461126605635584000000;" & _
"10888869450418352160768000000;" & _
"304888344611713860501504000000;" & _
"8841761993739701954543616000000;" & _
"265252859812191058636308480000000;"

a = a & "8222838654177922817725562880000000;" & _
"263130836933693530167218012160000000;" & _
"8683317618811886495518194401280000000;" & _
"295232799039604140847618609643520000000;" & _
"10333147966386144929666651337523200000000;" & _
"371993326789901217467999448150835200000000;" & _
"13763753091226345046315979581580902400000000;" & _
"523022617466601111760007224100074291200000000;" & _
"20397882081197443358640281739902897356800000000;" & _
"815915283247897734345611269596115894272000000000;"

a = a & "33452526613163807108170062053440751665152000000000;" & _
"1405006117752879898543142606244511569936384000000000;" & _
"60415263063373835637355132068513997507264512000000000;" & _
"2658271574788448768043625811014615890319638528000000000;" & _
"119622220865480194561963161495657715064383733760000000000;" & _
"5502622159812088949850305428800254892961651752960000000000;" & _
"258623241511168180642964355153611979969197632389120000000000;" & _
"12413915592536072670862289047373375038521486354677760000000000;" &
_
"608281864034267560872252163321295376887552831379210240000000000;"
& _

"30414093201713378043612608166064768844377641568960512000000000000;"

a = a &
"1551118753287382280224243016469303211063259720016986112000000000000;" & _

"80658175170943878571660636856403766975289505440883277824000000000000;" & _

"4274883284060025564298013753389399649690343788366813724672000000000000;" &
_

"230843697339241380472092742683027581083278564571807941132288000000000000;"
& _

"12696403353658275925965100847566516959580321051449436762275840000000000000;"
& _

"710998587804863451854045647463724949736497978881168458687447040000000000000;"
& _

"40526919504877216755680601905432322134980384796226602145184481280000000000000;"
& _

"2350561331282878571829474910515074683828862318181142924420699914240000000000000;"
& _

"138683118545689835737939019720389406345902876772687432540821294940160000000000000;"
& _

"8320987112741390144276341183223364380754172606361245952449277696409600000000000000;"

a = a &
"507580213877224798800856812176625227226004528988036003099405939480985600000000000000;"
& _

"31469973260387937525653122354950764088012280797258232192163168247821107200000000000000;"
& _

"1982608315404440064116146708361898137544773690227268628106279599612729753600000000000000;"
& _

"126886932185884164103433389335161480802865516174545192198801894375214704230400000000000000;"
& _

"8247650592082470666723170306785496252186258551345437492922123134388955774976000000000000000;"
& _

"544344939077443064003729240247842752644293064388798874532860126869671081148416000000000000000;"
& _

"36471110918188685288249859096605464427167635314049524593701628500267962436943872000000000000000;"
& _

"2480035542436830599600990418569171581047399201355367672371710738018221445712183296000000000000000;"
& _

"171122452428141311372468338881272839092270544893520369393648040923257279754140647424000000000000000;"
& _

"11978571669969891796072783721689098736458938142546425857555362864628009582789845319680000000000000000;"

a = a &
"850478588567862317521167644239926010288584608120796235886430763388588680378079017697280000000000000000;"
& _

"61234458376886086861524070385274672740778091784697328983823014963978384987221689274204160000000000000000;"
& _

"4470115461512684340891257138125051110076800700282905015819080092370422104067183317016903680000000000000000;"
& _

"330788544151938641225953028221253782145683251820934971170611926835411235700971565459250872320000000000000000;"
& _

"24809140811395398091946477116594033660926243886570122837795894512655842677572867409443815424000000000000000000;"
& _

"1885494701666050254987932260861146558230394535379329335672487982961844043495537923117729972224000000000000000000;"
& _

"145183092028285869634070784086308284983740379224208358846781574688061991349156420080065207861248000000000000000000;"
& _

"11324281178206297831457521158732046228731749579488251990048962825668835325234200766245086213177344000000000000000000;"
& _

"894618213078297528685144171539831652069808216779571907213868063227837990693501860533361810841010176000000000000000000;"
& _

"71569457046263802294811533723186532165584657342365752577109445058227039255480148842668944867280814080000000000000000000;"

a = a &
"5797126020747367985879734231578109105412357244731625958745865049716390179693892056256184534249745940480000000000000000000;"
& _

"475364333701284174842138206989404946643813294067993328617160934076743994734899148613007131808479167119360000000000000000000;"
& _

"39455239697206586511897471180120610571436503407643446275224357528369751562996629334879591940103770870906880000000000000000000;"
& _

"3314240134565353266999387579130131288000666286242049487118846032383059131291716864129885722968716753156177920000000000000000000;"
& _

"281710411438055027694947944226061159480056634330574206405101912752560026159795933451040286452340924018275123200000000000000000000;"
& _

"24227095383672732381765523203441259715284870552429381750838764496720162249742450276789464634901319465571660595200000000000000000000;"
& _

"2107757298379527717213600518699389595229783738061356212322972511214654115727593174080683423236414793504734471782400000000000000000000;"
& _

"185482642257398439114796845645546284380220968949399346684421580986889562184028199319100141244804501828416633516851200000000000000000000;"
& _

"16507955160908461081216919262453619309839666236496541854913520707833171034378509739399912570787600662729080382999756800000000000000000000;"
& _

"1485715964481761497309522733620825737885569961284688766942216863704985393094065876545992131370884059645617234469978112000000000000000000000;"

a = a &
"135200152767840296255166568759495142147586866476906677791741734597153670771559994765685283954750449427751168336768008192000000000000000000000;"
& _

"12438414054641307255475324325873553077577991715875414356840239582938137710983519518443046123837041347353107486982656753664000000000000000000000;"
& _

"1156772507081641574759205162306240436214753229576413535186142281213246807121467315215203289516844845303838996289387078090752000000000000000000000;"
& _

"108736615665674308027365285256786601004186803580182872307497374434045199869417927630229109214583415458560865651202385340530688000000000000000000000;"
& _

"10329978488239059262599702099394727095397746340117372869212250571234293987594703124871765375385424468563282236864226607350415360000000000000000000000;"
& _

"991677934870949689209571401541893801158183648651267795444376054838492222809091499987689476037000748982075094738965754305639874560000000000000000000000;"
& _

"96192759682482119853328425949563698712343813919172976158104477319333745612481875498805879175589072651261284189679678167647067832320000000000000000000000;"
& _

"9426890448883247745626185743057242473809693764078951663494238777294707070023223798882976159207729119823605850588608460429412647567360000000000000000000000;"
& _

"933262154439441526816992388562667004907159682643816214685929638952175999932299156089414639761565182862536979208272237582511852109168640000000000000000000000;"
& _

"93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000;"

b = Split(a, ";")

For i = LBound(b) To UBound(b)
If b(i) = strSilnia Then
AntySilnia = i + 1
Exit Function
End If
Next i

AntySilnia = -1

End Function


I po cholerę zarzynać procesor jakimiś algorytmami... :)

P.S. 1000! =
40238726007709377354370243392300398571937486421071463254379991042993
85123986290205920442084869694048004799886101971960586316668729948085
58901323829669944590997424504087073759918823627727188732519779505950
99527612087497546249704360141827809464649629105639388743788648733711
91810458257836478499770124766328898359557354325131853239584630755574
09114262417474349347553428646576611667797396668820291207379143853719
58824980812686783837455973174613608537953452422158659320192809087829
73084313928444032812315586110369768013573042161687476096758713483120
25478589320767169132448426236131412508780208000261683151027341827977
70478463586817016436502415369139828126481021309276124489635992870511
49649754199093422215668325720808213331861168115536158365469840467089
75602900950537616475847728421889679646244945160765353408198901385442
48798495995331910172335555660213945039973628075013783761530712776192
68490343526252000158885351473316117021039681759215109077880193931781
14194545257223865541461062892187960223838971476088506276862967146674
69756291123408243920816015378088989396451826324367161676217916890977
99119037540312746222899880051954444142820121873617459926429565817466
28302955570299024324153181617210465832036786906117260158783520751516
28422554026517048330422614397428693306169089796848259012545832716822
64580665267699586526822728070757813918581788896522081643483448259932
66043367660176999612831860788386150279465955131156552036093988180612
13855860030143569452722420634463179746059468257310379008402443243846
56572450144028218852524709351906209290231364932734975655139587205596
54228749774011413346962715422845862377387538230483865688976461927383
81490014076731044664025989949022222176590433990188601856652648506179
97023561938970178600408118897299183110211712298459016419210688843871
21855646124960798722908519296819372388642614839657382291123125024186
64935314397013742853192664987533721894069428143411852015801412334482
80150513996942901534830776445690990731524332782882698646027898643211
39083506217095002597389863554277196742822248757586765752344220207573
63056949882508796892816275384886339690995982628095612145099487170124
45164612603790293091208890869420285106401821543994571568059418727489
98094254742173582401063677404595741785160829230135358081840096996372
52423056085590370062427124341690900415369010593398383577793941097002
77534720000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000

Drugie postscriptum: 10000! ma 36708 cyfr, nie będę tego tu wklejał bo nudy
straszne, mało kto dotrzymałby do sygnaturki... Zwłaszcza końcówka
wyjątkowo monotonna, prawie zasnąłem.
--
PL pozdrawiający przedweekendowo :)
Zawias
2005-10-07 20:10:23 UTC
Permalink
Post by Piotr Lipski
Post by Zawias
witam,
potrzebuję kodu, który wyliczyłby mi jakiej liczby silnią jest liczba X
[...]
Czytam sobie ten wątek i czytam... :) Jeżeli faktycznie zadowala Cię
antysilnia z wynikiem max. 32, nic prostszego, oto funkcja działająca
poprawnie w zakresie do 100: (uwaga na połamane wiersze...)
Public Function AntySilnia(ByVal strSilnia As String) As Integer
Dim a As String
a = "1;" & _
"2;" & _
"6;" & _
"24;" & _
"120;" & _
"720;" & _
"5040;" & _
"40320;" & _
"362880;" & _
"3628800;"
a = a & "39916800;" & _
"479001600;" & _
"6227020800;" & _
"87178291200;" & _
"1307674368000;" & _
"20922789888000;" & _
"355687428096000;" & _
"6402373705728000;" & _
"121645100408832000;" & _
"2432902008176640000;"
a = a & "51090942171709440000;" & _
"1124000727777607680000;" & _
"25852016738884976640000;" & _
"620448401733239439360000;" & _
"15511210043330985984000000;" & _
"403291461126605635584000000;" & _
"10888869450418352160768000000;" & _
"304888344611713860501504000000;" & _
"8841761993739701954543616000000;" & _
"265252859812191058636308480000000;"
a = a & "8222838654177922817725562880000000;" & _
"263130836933693530167218012160000000;" & _
"8683317618811886495518194401280000000;" & _
"295232799039604140847618609643520000000;" & _
"10333147966386144929666651337523200000000;" & _
"371993326789901217467999448150835200000000;" & _
"13763753091226345046315979581580902400000000;" & _
"523022617466601111760007224100074291200000000;" & _
"20397882081197443358640281739902897356800000000;" & _
"815915283247897734345611269596115894272000000000;"
a = a & "33452526613163807108170062053440751665152000000000;" & _
"1405006117752879898543142606244511569936384000000000;" & _
"60415263063373835637355132068513997507264512000000000;" & _
"2658271574788448768043625811014615890319638528000000000;" & _
"119622220865480194561963161495657715064383733760000000000;" & _
"5502622159812088949850305428800254892961651752960000000000;" & _
"258623241511168180642964355153611979969197632389120000000000;" & _
"12413915592536072670862289047373375038521486354677760000000000;" &
_
"608281864034267560872252163321295376887552831379210240000000000;"
& _
"30414093201713378043612608166064768844377641568960512000000000000;"
a = a &
"1551118753287382280224243016469303211063259720016986112000000000000;" & _
"80658175170943878571660636856403766975289505440883277824000000000000;" & _
"4274883284060025564298013753389399649690343788366813724672000000000000;" &
_
"230843697339241380472092742683027581083278564571807941132288000000000000;"
& _
"12696403353658275925965100847566516959580321051449436762275840000000000000;"
& _
"710998587804863451854045647463724949736497978881168458687447040000000000000;"
& _
"40526919504877216755680601905432322134980384796226602145184481280000000000000;"
& _
"2350561331282878571829474910515074683828862318181142924420699914240000000000000;"
& _
"138683118545689835737939019720389406345902876772687432540821294940160000000000000;"
& _
"8320987112741390144276341183223364380754172606361245952449277696409600000000000000;"
a = a &
"507580213877224798800856812176625227226004528988036003099405939480985600000000000000;"
& _
"31469973260387937525653122354950764088012280797258232192163168247821107200000000000000;"
& _
"1982608315404440064116146708361898137544773690227268628106279599612729753600000000000000;"
& _
"126886932185884164103433389335161480802865516174545192198801894375214704230400000000000000;"
& _
"8247650592082470666723170306785496252186258551345437492922123134388955774976000000000000000;"
& _
"544344939077443064003729240247842752644293064388798874532860126869671081148416000000000000000;"
& _
"36471110918188685288249859096605464427167635314049524593701628500267962436943872000000000000000;"
& _
"2480035542436830599600990418569171581047399201355367672371710738018221445712183296000000000000000;"
& _
"171122452428141311372468338881272839092270544893520369393648040923257279754140647424000000000000000;"
& _
"11978571669969891796072783721689098736458938142546425857555362864628009582789845319680000000000000000;"
a = a &
"850478588567862317521167644239926010288584608120796235886430763388588680378079017697280000000000000000;"
& _
"61234458376886086861524070385274672740778091784697328983823014963978384987221689274204160000000000000000;"
& _
"4470115461512684340891257138125051110076800700282905015819080092370422104067183317016903680000000000000000;"
& _
"330788544151938641225953028221253782145683251820934971170611926835411235700971565459250872320000000000000000;"
& _
"24809140811395398091946477116594033660926243886570122837795894512655842677572867409443815424000000000000000000;"
& _
"1885494701666050254987932260861146558230394535379329335672487982961844043495537923117729972224000000000000000000;"
& _
"145183092028285869634070784086308284983740379224208358846781574688061991349156420080065207861248000000000000000000;"
& _
"11324281178206297831457521158732046228731749579488251990048962825668835325234200766245086213177344000000000000000000;"
& _
"894618213078297528685144171539831652069808216779571907213868063227837990693501860533361810841010176000000000000000000;"
& _
"71569457046263802294811533723186532165584657342365752577109445058227039255480148842668944867280814080000000000000000000;"
a = a &
"5797126020747367985879734231578109105412357244731625958745865049716390179693892056256184534249745940480000000000000000000;"
& _
"475364333701284174842138206989404946643813294067993328617160934076743994734899148613007131808479167119360000000000000000000;"
& _
"39455239697206586511897471180120610571436503407643446275224357528369751562996629334879591940103770870906880000000000000000000;"
& _
"3314240134565353266999387579130131288000666286242049487118846032383059131291716864129885722968716753156177920000000000000000000;"
& _
"281710411438055027694947944226061159480056634330574206405101912752560026159795933451040286452340924018275123200000000000000000000;"
& _
"24227095383672732381765523203441259715284870552429381750838764496720162249742450276789464634901319465571660595200000000000000000000;"
& _
"2107757298379527717213600518699389595229783738061356212322972511214654115727593174080683423236414793504734471782400000000000000000000;"
& _
"185482642257398439114796845645546284380220968949399346684421580986889562184028199319100141244804501828416633516851200000000000000000000;"
& _
"16507955160908461081216919262453619309839666236496541854913520707833171034378509739399912570787600662729080382999756800000000000000000000;"
& _
"1485715964481761497309522733620825737885569961284688766942216863704985393094065876545992131370884059645617234469978112000000000000000000000;"
a = a &
"135200152767840296255166568759495142147586866476906677791741734597153670771559994765685283954750449427751168336768008192000000000000000000000;"
& _
"12438414054641307255475324325873553077577991715875414356840239582938137710983519518443046123837041347353107486982656753664000000000000000000000;"
& _
"1156772507081641574759205162306240436214753229576413535186142281213246807121467315215203289516844845303838996289387078090752000000000000000000000;"
& _
"108736615665674308027365285256786601004186803580182872307497374434045199869417927630229109214583415458560865651202385340530688000000000000000000000;"
& _
"10329978488239059262599702099394727095397746340117372869212250571234293987594703124871765375385424468563282236864226607350415360000000000000000000000;"
& _
"991677934870949689209571401541893801158183648651267795444376054838492222809091499987689476037000748982075094738965754305639874560000000000000000000000;"
& _
"96192759682482119853328425949563698712343813919172976158104477319333745612481875498805879175589072651261284189679678167647067832320000000000000000000000;"
& _
"9426890448883247745626185743057242473809693764078951663494238777294707070023223798882976159207729119823605850588608460429412647567360000000000000000000000;"
& _
"933262154439441526816992388562667004907159682643816214685929638952175999932299156089414639761565182862536979208272237582511852109168640000000000000000000000;"
& _
"93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000;"
b = Split(a, ";")
For i = LBound(b) To UBound(b)
If b(i) = strSilnia Then
AntySilnia = i + 1
Exit Function
End If
Next i
AntySilnia = -1
End Function
I po cholerę zarzynać procesor jakimiś algorytmami... :)
P.S. 1000! =
40238726007709377354370243392300398571937486421071463254379991042993
85123986290205920442084869694048004799886101971960586316668729948085
58901323829669944590997424504087073759918823627727188732519779505950
99527612087497546249704360141827809464649629105639388743788648733711
91810458257836478499770124766328898359557354325131853239584630755574
09114262417474349347553428646576611667797396668820291207379143853719
58824980812686783837455973174613608537953452422158659320192809087829
73084313928444032812315586110369768013573042161687476096758713483120
25478589320767169132448426236131412508780208000261683151027341827977
70478463586817016436502415369139828126481021309276124489635992870511
49649754199093422215668325720808213331861168115536158365469840467089
75602900950537616475847728421889679646244945160765353408198901385442
48798495995331910172335555660213945039973628075013783761530712776192
68490343526252000158885351473316117021039681759215109077880193931781
14194545257223865541461062892187960223838971476088506276862967146674
69756291123408243920816015378088989396451826324367161676217916890977
99119037540312746222899880051954444142820121873617459926429565817466
28302955570299024324153181617210465832036786906117260158783520751516
28422554026517048330422614397428693306169089796848259012545832716822
64580665267699586526822728070757813918581788896522081643483448259932
66043367660176999612831860788386150279465955131156552036093988180612
13855860030143569452722420634463179746059468257310379008402443243846
56572450144028218852524709351906209290231364932734975655139587205596
54228749774011413346962715422845862377387538230483865688976461927383
81490014076731044664025989949022222176590433990188601856652648506179
97023561938970178600408118897299183110211712298459016419210688843871
21855646124960798722908519296819372388642614839657382291123125024186
64935314397013742853192664987533721894069428143411852015801412334482
80150513996942901534830776445690990731524332782882698646027898643211
39083506217095002597389863554277196742822248757586765752344220207573
63056949882508796892816275384886339690995982628095612145099487170124
45164612603790293091208890869420285106401821543994571568059418727489
98094254742173582401063677404595741785160829230135358081840096996372
52423056085590370062427124341690900415369010593398383577793941097002
77534720000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000
Drugie postscriptum: 10000! ma 36708 cyfr, nie będę tego tu wklejał bo nudy
straszne, mało kto dotrzymałby do sygnaturki... Zwłaszcza końcówka
wyjątkowo monotonna, prawie zasnąłem.
mam to przepisać "z palca", czy mogę użyć "kopiuj" i "wklej", łaskawy
Kolego?
nazwałbym to, powiedzmy... popisywaniem się?
--
pzdr
Zawias
(adres przekrecony o 13)
Piotr Lipski
2005-10-08 17:37:20 UTC
Permalink
Dnia Fri, 07 Oct 2005 22:10:23 +0200, Zawias napisał(a):

[...]
Post by Zawias
mam to przepisać "z palca", czy mogę użyć "kopiuj" i "wklej", łaskawy
Kolego?
nazwałbym to, powiedzmy... popisywaniem się?
Nie wiem jak byś to nazwał. Faktem jest, że podana przeze mnie metoda jest
najłatwiejsza do zaimplementowania, najszybsza w działaniu i w dodatku
działa dla liczb dużo większych niż wypocone w pozostałej części wątka 24
czy 32.

Oczywiście możesz to sobie ^C-^V gdzie bądź (z palca nie polecam, szkoda
palca), jeżeli dodatkowo jesteś zainteresowany, mam u siebie silnie
wszystkich liczb naturalnych <=100000, mogę podesłać na email.

Hint: bc
--
PL
Marteczek
2005-10-07 20:48:09 UTC
Permalink
Formalnie nie istnieje funkcja odwrotna do silni :)
M.
Piotr Lipski
2005-10-08 17:55:26 UTC
Permalink
Post by Marteczek
Formalnie nie istnieje funkcja odwrotna do silni :)
Formalnie istnieje każda funkcja, jaką sobie dowolny programista napisze w
dowolnym języku programowania. Zresztą, co dokładnie rozumiesz pod słówkiem
"formalnie"?

Bajdełej, co do silni - silnie z liczb WYŁĄCZNIE dodatnich oraz WYŁĄCZNIE
całkowitych to zaledwie wierzchołek góry lodowej :) Poczytaj sobie o
funkcji Gamma Eulera...
--
PL
Marteczek
2005-10-09 08:50:47 UTC
Permalink
Post by Piotr Lipski
Post by Marteczek
Formalnie nie istnieje funkcja odwrotna do silni :)
Formalnie istnieje każda funkcja, jaką sobie dowolny programista napisze w
dowolnym języku programowania.
Ale w szkole jeden uczeń za zakodowanie funkcji dostaje 6 a drugi 1.
Post by Piotr Lipski
Zresztą, co dokładnie rozumiesz pod słówkiem
"formalnie"?
Chodziło mi o to, jak uczą w szkole. W gimnazjum uczą, że funkcja jest
odwracalna, jeśli jest różnowartościowa. Silnia, która we wszystkich
znanych mi książkach jest zdefiniowana jednakowo, nie jest funkcją
różnowartościową.
Ogólnie chciałem zwrócić uwagę na to, że programiści czasami nie
zwracają uwagi na detale co prowadzi do powstawania programów oderwanych
od rzeczywistości.
M.
Piotr Lipski
2005-10-10 05:49:35 UTC
Permalink
Dnia Sun, 09 Oct 2005 10:50:47 +0200, Marteczek napisał(a):

[...]
Post by Marteczek
Chodziło mi o to, jak uczą w szkole. W gimnazjum uczą, że funkcja jest
odwracalna, jeśli jest różnowartościowa. Silnia, która we wszystkich
znanych mi książkach jest zdefiniowana jednakowo, nie jest funkcją
różnowartościową.
Racja. Podobnie zresztą jak funkcja Gamma.
Post by Marteczek
Ogólnie chciałem zwrócić uwagę na to, że programiści czasami nie
zwracają uwagi na detale co prowadzi do powstawania programów oderwanych
od rzeczywistości.
Ogólnie to każdy program komputerowy w jakiś sposób stara się odnieść do
świata rzeczywistego. I zawsze będą uproszczenia ("nie zwracanie uwagi na
detale"), bo tak właśnie ma być.

Oczywiście "uproszczenia" nie powinny być mylone z nieuctwem :)
--
PL, ppk.
Nguyen Bang Giang
2005-10-10 07:19:46 UTC
Permalink
Post by Piotr Lipski
Ogólnie to każdy program komputerowy w jakiś sposób stara się odnieść do
świata rzeczywistego.
Chińczycy mówią od 4000 lat, że są 3 rzeczy, których człowiek nie zrozumie
nigdy. Między innymi rzeczywistość.

Loading...