Funkcja z wykorzystaniem szeregu Maclaurina dla sin(Pi/6).

Własności funkcji trygonometrycznych i cyklometrycznych. Tożsamości. RÓWNANIA I NIERÓWNOŚCI.
sylvi91
Użytkownik
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).

Post autor: sylvi91 »

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.
a4karo
Użytkownik
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).

Post autor: a4karo »

\(\displaystyle{ \sin \pi/6 }\) nie jest funkcją lecz stałą i wystarczy ją zadeklarować.
sylvi91
Użytkownik
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).

Post autor: sylvi91 »

a4karo pisze: 14 sie 2023, o 10:17 \(\displaystyle{ \sin \pi/6 }\) nie jest funkcją lecz stałą i wystarczy ją zadeklarować.
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
Oczywiście można dokładniej zdefiniować Pi.

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
Dodano po 3 godzinach 53 minutach 14 sekundach:
a4karo pisze: 14 sie 2023, o 10:17 \(\displaystyle{ \sin \pi/6 }\) nie jest funkcją lecz stałą i wystarczy ją zadeklarować.
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ą.
a4karo
Użytkownik
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).

Post autor: a4karo »

Tego akurat uczą w szkole. Może ci zaświta gdy się dowiesz, że `\pi/6` radiana to 30 stopni
sylvi91
Użytkownik
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).

Post autor: sylvi91 »

a4karo pisze: 14 sie 2023, o 16:15 Tego akurat uczą w szkole. Może ci zaświta gdy się dowiesz, że `\pi/6` radiana to 30 stopni
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ę?
Awatar użytkownika
AiDi
Moderator
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).

Post autor: AiDi »

sylvi91 pisze: 14 sie 2023, o 18:37 Porobiłem pewne obliczenia i wszystko na to wskazuje, że to nie 0.500000000000000000000000000...
No to źle świadczy o Twoich obliczeniach. "Nie bądź śmieszny kolego."
Możesz przedstawić jakieś materiały/dowody na to jak jest naprawdę?
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.
ogólnie przyjęta wartośc Pi obliczana za pomocą dziwnych metod matematycznych
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.
sylvi91
Użytkownik
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).

Post autor: sylvi91 »

AiDi pisze: 14 sie 2023, o 18:42 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.
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;
}
Mam nadzieję, że znasz ten język i potrafisz logicznie to wytłumaczyć.

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.
Awatar użytkownika
AiDi
Moderator
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).

Post autor: AiDi »

sylvi91 pisze: 14 sie 2023, o 19:56 Mam nadzieję, że znasz ten język i potrafisz logicznie to wytłumaczyć.
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.
sylvi91
Użytkownik
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).

Post autor: sylvi91 »

AiDi pisze: 14 sie 2023, o 20:00
sylvi91 pisze: 14 sie 2023, o 19:56 Mam nadzieję, że znasz ten język i potrafisz logicznie to wytłumaczyć.
Nie, brzydzę się informatyką.
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?
AiDi pisze: 14 sie 2023, o 20:00
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.
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.
a4karo
Użytkownik
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).

Post autor: a4karo »

Czy to się leczy?
Awatar użytkownika
AiDi
Moderator
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).

Post autor: AiDi »

sylvi91 pisze: 15 sie 2023, o 05:54 Właśnie obalam jedną z teorii dotyczącą obliczania wartości liczby Pi
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.
Zablokowany