Funkcja z wykorzystaniem szeregu Maclaurina dla sin(Pi/6).
-
- Użytkownik
- Posty: 64
- Rejestracja: 10 paź 2017, o 04:40
- Płeć: Mężczyzna
- wiek: 47
- Lokalizacja: Łódź
- Podziękował: 6 razy
Funkcja z wykorzystaniem szeregu Maclaurina dla sin(Pi/6).
Witam.
Potrzebuję pilnie pomocy przy stworzeniu funkcji napisanej w języku C z wykorzystaniem biblioteki MPFR, w której jest użyty szereg Maclaurina do rozwinięcia funkcji sin(Pi/6).
Proszę o wsparcie.
Mam nowy algorytm dla obliczania wartości liczby Pi, który wykorzystuje liczby ciągu Fibonacciego i chciałbym potwierdzić jego wyniki.
Ten algorytm to FCPI - czyli Fast Fibonacci compute Pi.
Jest zaczęty o tym wątek na forum.
informatyka-f13/algorytmy-fcpi-fast-fib ... l#p5657965
Każda podpowiedź mile widziana. Wersja z rozwinięciem napisana w c std z użyciem biblioteki math była by ogromną podpowiedzią.
Pozdrawiam.
Potrzebuję pilnie pomocy przy stworzeniu funkcji napisanej w języku C z wykorzystaniem biblioteki MPFR, w której jest użyty szereg Maclaurina do rozwinięcia funkcji sin(Pi/6).
Proszę o wsparcie.
Mam nowy algorytm dla obliczania wartości liczby Pi, który wykorzystuje liczby ciągu Fibonacciego i chciałbym potwierdzić jego wyniki.
Ten algorytm to FCPI - czyli Fast Fibonacci compute Pi.
Jest zaczęty o tym wątek na forum.
informatyka-f13/algorytmy-fcpi-fast-fib ... l#p5657965
Każda podpowiedź mile widziana. Wersja z rozwinięciem napisana w c std z użyciem biblioteki math była by ogromną podpowiedzią.
Pozdrawiam.
-
- Użytkownik
- Posty: 22211
- Rejestracja: 15 maja 2011, o 20:55
- Płeć: Mężczyzna
- Lokalizacja: Bydgoszcz
- Podziękował: 38 razy
- Pomógł: 3755 razy
Re: Funkcja z wykorzystaniem szeregu Maclaurina dla sin(Pi/6).
\(\displaystyle{ \sin \pi/6 }\) nie jest funkcją lecz stałą i wystarczy ją zadeklarować.
-
- Użytkownik
- Posty: 64
- Rejestracja: 10 paź 2017, o 04:40
- Płeć: Mężczyzna
- wiek: 47
- Lokalizacja: Łódź
- Podziękował: 6 razy
Re: Funkcja z wykorzystaniem szeregu Maclaurina dla sin(Pi/6).
NIe bądź śmieszny kolego.
Ja o tym wiem. Masz rację. A ty jak zwykle nie rozumiesz o czym ja piszę.
Sin jest funkcją/metodą. To, że znasz wartość Sin(Pi/6) nie znaczy, że sin jest stałą.
Chodzi mi o rozwinięcia jak pisałem dla sin(Pi/6) w postaci funkcji z wykorzystaniem szeregu Maclaurina.
Albo może prościej o rozwiniecie sin(x). Gdzie x = Pi/6.
Taka funkcja sin() albo exp() jest np. w bibliotece programistycznej math języka c jak i jest metodą do obliczania kąta. Stałą jest wartość Pi.
Którą się dalkaruje w C tak:
Kod: Zaznacz cały
#define Pi 3.14
Ale po latach przygody i doświadczeń z różnymi językami programowania i samokształceniem się w dziedzinie matematyki doszedłem do wniosku, że ogólnie przyjęta wartośc Pi obliczana za pomocą dziwnych metod matematycznych i przełożona na funkcje w językach może nie być poprawna.
Chciałem zweryfikować swój algorytm FCPI, tylko tyle. A rozwinięcia Maclauriana za bardzo nie rozumiem choć tu jest jeden filmik, który obejrzałem.
Kod: Zaznacz cały
https://www.youtube.com/watch?v=WqizAc-4Z2E
To może prościej na początek.
Jaka to wartość kolego? Powiedz nam. Może ktoś inny poda? Wtedy się zastanowimy co dalej z tą wiedzą.
-
- Użytkownik
- Posty: 22211
- Rejestracja: 15 maja 2011, o 20:55
- Płeć: Mężczyzna
- Lokalizacja: Bydgoszcz
- Podziękował: 38 razy
- Pomógł: 3755 razy
Re: Funkcja z wykorzystaniem szeregu Maclaurina dla sin(Pi/6).
Tego akurat uczą w szkole. Może ci zaświta gdy się dowiesz, że `\pi/6` radiana to 30 stopni
-
- Użytkownik
- Posty: 64
- Rejestracja: 10 paź 2017, o 04:40
- Płeć: Mężczyzna
- wiek: 47
- Lokalizacja: Łódź
- Podziękował: 6 razy
Re: Funkcja z wykorzystaniem szeregu Maclaurina dla sin(Pi/6).
Kolego ja wiem, że to jest. 1/2 czyli 0.5.
Ale mógłbym z Tobą długo dyskutować czy to jest 0.500000000000000000000000000... , czy może jednak np. 0.5000069473710591717286...?
Porobiłem pewne obliczenia i wszystko na to wskazuje, że to nie 0.500000000000000000000000000...
Możesz przedstawić jakieś materiały/dowody na to jak jest naprawdę?
- AiDi
- Moderator
- Posty: 3843
- Rejestracja: 25 maja 2009, o 22:58
- Płeć: Mężczyzna
- Lokalizacja: Warszawa
- Podziękował: 45 razy
- Pomógł: 702 razy
Re: Funkcja z wykorzystaniem szeregu Maclaurina dla sin(Pi/6).
No to źle świadczy o Twoich obliczeniach. "Nie bądź śmieszny kolego."
Każdy podręcznik do liceum (do odpowiedniej klasy oczywiście, zależnie od wydawnictwa) zawiera uzasadnienie tego, dlaczego tyle wynosi sinus 30 stopni. A jak nie chce Ci się wertować podręczników to popatrz na proporcje boków w trójkącie prostokątnym otrzymanym z podziału trójkąta równobocznego jedną z wysokości. No i oczywiście na definicję funkcji sinus w trójkącie prostokątnym. Samokształcenie powinno zaczynać się od podstaw.Możesz przedstawić jakieś materiały/dowody na to jak jest naprawdę?
Nie dziwnych, tylko po prostu przez Ciebie nie rozumianych. Metody te są proste - każdy student pierwszych lat kierunków ścisłych powinien je rozumieć bez problemu.ogólnie przyjęta wartośc Pi obliczana za pomocą dziwnych metod matematycznych
-
- Użytkownik
- Posty: 64
- Rejestracja: 10 paź 2017, o 04:40
- Płeć: Mężczyzna
- wiek: 47
- Lokalizacja: Łódź
- Podziękował: 6 razy
Re: Funkcja z wykorzystaniem szeregu Maclaurina dla sin(Pi/6).
Poważnie? Bez problemu?
Znam metodę Chudnowskiego, Brent-Salamin, Ramanujana, Leibniza i swoją FCPI.
I uważam, że tylko moja FCPI i Leibniza daje dobry wynik wartośći PI, tylko mało kto wie jak wykorzystać formułę Leibniza na komputerze.
Dobrze, przejdźmy do bardziej zaawansowanych pytań z Tobą. Wyjaśnij mi zatem dlaczego w metodzie Brent Salamin użytej w bibliotece mpfr jest taka bezsensowna procedura w pliku const_pi.c?
Kod: Zaznacz cały
/* mpfr_const_pi -- compute Pi
Copyright 1999-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
The GNU MPFR Library is free software; you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation; either version 3 of the License, or (at your
option) any later version.
The GNU MPFR Library is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
License for more details.
You should have received a copy of the GNU Lesser General Public License
along with the GNU MPFR Library; see the file COPYING.LESSER. If not, see
https://www.gnu.org/licenses/ or write to the Free Software Foundation, Inc.,
51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. */
#include "mpfr-impl.h"
/* Declare the cache */
#ifndef MPFR_USE_LOGGING
MPFR_DECL_INIT_CACHE (__gmpfr_cache_const_pi, mpfr_const_pi_internal)
#else
MPFR_DECL_INIT_CACHE (__gmpfr_normal_pi, mpfr_const_pi_internal)
MPFR_DECL_INIT_CACHE (__gmpfr_logging_pi, mpfr_const_pi_internal)
MPFR_THREAD_VAR (mpfr_cache_ptr, __gmpfr_cache_const_pi, __gmpfr_normal_pi)
#endif
/* Set User Interface */
#undef mpfr_const_pi
int
mpfr_const_pi (mpfr_ptr x, mpfr_rnd_t rnd_mode) {
return mpfr_cache (x, __gmpfr_cache_const_pi, rnd_mode);
}
/* The algorithm used here is taken from Section 8.2.5 of the book
"Fast Algorithms: A Multitape Turing Machine Implementation"
by A. Schönhage, A. F. W. Grotefeld and E. Vetter, 1994.
It is a clever form of Brent-Salamin formula. */
/* Don't need to save/restore exponent range: the cache does it */
int
mpfr_const_pi_internal (mpfr_ptr x, mpfr_rnd_t rnd_mode)
{
mpfr_t a, A, B, D, S;
mpfr_prec_t px, p, cancel, k, kmax;
MPFR_GROUP_DECL (group);
MPFR_ZIV_DECL (loop);
int inex;
MPFR_LOG_FUNC
(("rnd_mode=%d", rnd_mode),
("x[%Pd]=%.*Rg inexact=%d", mpfr_get_prec(x), mpfr_log_prec, x, inex));
px = MPFR_PREC (x);
/* we need 9*2^kmax - 4 >= px+2*kmax+8 */
for (kmax = 2; ((px + 2 * kmax + 12) / 9) >> kmax; kmax ++);
p = px + 3 * kmax + 14; /* guarantees no recomputation for px <= 10000 */ // Dlaczego 3, 14 i limit do 10000 ?
MPFR_GROUP_INIT_5 (group, p, a, A, B, D, S);
MPFR_ZIV_INIT (loop, p);
for (;;) {
mpfr_set_ui (a, 1, MPFR_RNDN); /* a = 1 */
mpfr_set_ui (A, 1, MPFR_RNDN); /* A = a^2 = 1 */
mpfr_set_ui_2exp (B, 1, -1, MPFR_RNDN); /* B = b^2 = 1/2 */
mpfr_set_ui_2exp (D, 1, -2, MPFR_RNDN); /* D = 1/4 */
#define b B
#define ap a
#define Ap A
#define Bp B
for (k = 0; ; k++)
{
/* invariant: 1/2 <= B <= A <= a < 1 */
mpfr_add (S, A, B, MPFR_RNDN); /* 1 <= S <= 2 */
mpfr_div_2ui (S, S, 2, MPFR_RNDN); /* exact, 1/4 <= S <= 1/2 */
mpfr_sqrt (b, B, MPFR_RNDN); /* 1/2 <= b <= 1 */
mpfr_add (ap, a, b, MPFR_RNDN); /* 1 <= ap <= 2 */
mpfr_div_2ui (ap, ap, 1, MPFR_RNDN); /* exact, 1/2 <= ap <= 1 */
mpfr_sqr (Ap, ap, MPFR_RNDN); /* 1/4 <= Ap <= 1 */
mpfr_sub (Bp, Ap, S, MPFR_RNDN); /* -1/4 <= Bp <= 3/4 */
mpfr_mul_2ui (Bp, Bp, 1, MPFR_RNDN); /* -1/2 <= Bp <= 3/2 */
mpfr_sub (S, Ap, Bp, MPFR_RNDN);
MPFR_ASSERTD (mpfr_cmp_ui (S, 1) < 0);
cancel = MPFR_NOTZERO (S) ? (mpfr_uexp_t) -mpfr_get_exp(S) : p;
/* MPFR_ASSERTN (cancel >= px || cancel >= 9 * (1 << k) - 4); */
mpfr_mul_2ui (S, S, k, MPFR_RNDN);
mpfr_sub (D, D, S, MPFR_RNDN);
/* stop when |A_k - B_k| <= 2^(k-p) i.e. cancel >= p-k */
if (cancel >= p - k)
break;
}
#undef b
#undef ap
#undef Ap
#undef Bp
mpfr_div (A, B, D, MPFR_RNDN);
/* MPFR_ASSERTN(p >= 2 * k + 8); */
if (MPFR_LIKELY (MPFR_CAN_ROUND (A, p - 2 * k - 8, px, rnd_mode))) // Dlaczego 2 i 8 ?
break;
p += kmax;
MPFR_ZIV_NEXT (loop, p);
MPFR_GROUP_REPREC_5 (group, p, a, A, B, D, S);
}
MPFR_ZIV_FREE (loop);
inex = mpfr_set (x, A, rnd_mode);
MPFR_GROUP_CLEAR (group);
return inex;
}
Moim zdaniem ta cała procedura jest błędna, m.in. dlatego, że używa metody: MPFR_CAN_ROUND co powoduje zaokraglenia.
Teraz pytanie jak kompilator interpretuje te zaokrąglenia; w górę, w dół, czy randomowo?
Poza tym dlaczego w tej procedurze, wykorzystuje się jakieś przypadkowe liczby naturalne: 2,8.
Ja mam znacznie bardziej przejrzystą procedurę do obliczania wartości liczby Pi. Wykorzystuję w niej Boską Proporcję, Złota Liczbę Phi.
Mam nadzieję, że rozumiesz listing i znasz się trochę na tych dziwnych teoriach do obliczania Pi.
No i w szkole mówili mi tylko, że to 1/2 albo 0.5 a nie, że to 0.500000000000000000000000000000000... i zera ciągnąć się mają w nieskończoność. Rozumiesz? Bądżmy precyzyjni w obliczaniu wartości Pi i Pi/6 i tak dalej..
Pozdrawiam.
- AiDi
- Moderator
- Posty: 3843
- Rejestracja: 25 maja 2009, o 22:58
- Płeć: Mężczyzna
- Lokalizacja: Warszawa
- Podziękował: 45 razy
- Pomógł: 702 razy
Re: Funkcja z wykorzystaniem szeregu Maclaurina dla sin(Pi/6).
Nie, brzydzę się informatyką.
No i w szkole mówili mi tylko, że to 1/2 albo 0.5 a nie, że to 0.500000000000000000000000000000000... i zera ciągnąć się mają w nieskończoność.
W szkole mówili Ci też, że to to samo. I w związku z tym nie pisze się tych zer, bo nie ma potrzeby.
-
- Użytkownik
- Posty: 64
- Rejestracja: 10 paź 2017, o 04:40
- Płeć: Mężczyzna
- wiek: 47
- Lokalizacja: Łódź
- Podziękował: 6 razy
Re: Funkcja z wykorzystaniem szeregu Maclaurina dla sin(Pi/6).
To jesteś ignorantem.
To znaczy, że nic nie wiesz o prawidłowym obliczaniu wartości liczby Pi. Więc się tak nie wymądrzaj. OK?
Inteligencie!!! Ja wiem, że Ty sprytny jesteś inaczej. Ja wiem, że to jest to samo. Ale jeśli chodzi o sin(Pi/6) to on ma inną wartość niż 0.500000000000000000000000000000000... ale taką, że jest to bliskie 0.5 jak uczono w szkole.
Przynajmniej taki wynik wychodzi z wykorzystaniem wbudowanych funkcji sin z math i mpfr_sin z mpfr.
Dlatego potrzebuję rozwinąć funkcję sin(x) do szeregu aby policzyć to jeszcze raz i sprawdzić wyniki, bo może się okazać, że sin() z math źle liczy, zbyt mało dokładnie.
Zrozum liczby, OK?. Może i jesteś matematykiem, czy fizykiem, ale nie masz pojęcia o liczbach i ich reprezentacji w pamięci komputerów.
Jakbyś tego nie rozumiał jeszcze co napisałem wyżej, to Ci wyjaśnię inaczej. Właśnie obalam jedną z teorii dotyczącą obliczania wartości liczby Pi, Brent-Salamin przełożona na język C pokazuje, że ma sporo błędów logicznych i wybiera zupełnie przypadkowe liczby naturalne do działań arytmetycznych, oraz zawęża niepotrzebnie zakres potrzebnych do kalkulacji liczb.
Zrozum język C i bibliotekę math chociaż, to pogadamy o obliczaniu wartości liczby Pi. Ja znalazłem bug w dużo bardziej zaawansowanej bibliotece mpfr. Pozdrawiam.
P.S. Jedyna możliwośc obliczenia poprawnej wartości liczby Pi za pomoca klasycznych równań, to jest użycie formuły Leibniza na superkomputerze.
Ja napisałem taką formułę rozszerzoną dla Leibniza, ale mój komputer jest za słaby. Liczy i liczy od ponad 3 dni non stop i końca nie widać. A to i tak puściłęm na zakres jedynie do 1000000000000 kroków.
Może ktoś ma dostęp do superkomputera tutaj, aby zapuścić na nim moją procedurę PILL - Pi Leibnz Long ? Potrzeba puścić ten program z dużo większą ilośią kroków, na większy zakres.
- AiDi
- Moderator
- Posty: 3843
- Rejestracja: 25 maja 2009, o 22:58
- Płeć: Mężczyzna
- Lokalizacja: Warszawa
- Podziękował: 45 razy
- Pomógł: 702 razy
Re: Funkcja z wykorzystaniem szeregu Maclaurina dla sin(Pi/6).
Chyba już mieliśmy jeden temat na ten temat, w którym pokazałeś nam że nawet nie wiesz jaka jest definicja liczby \(\displaystyle{ \pi}\). Trolling (świadomy lub nie) to nie tutaj.