Skąd wziąć matematyczne stałe

2009-05-09 12:24

Jeśli tylko liczymy coś bardziej skomplikowanego niż rozmieszczenie kontrolek w oknie, to niechybnie zaczniemy potrzebować którejś ze stałych matematycznych – na przykład π. Co wtedy robimy? Ano całkiem często skutkuje to włączeniem do programu deklaracji typu:

  1. const double PI = 3.14159265358979;

Nie jest to oczywiście wielkie zło (a już na pewno mniejsze niż bezpośrednie korzystanie z definicji typu π = 4atan(1)), ale w większości przypadków jest to też wyważanie otwartych drzwi. Potrzebne stałe mamy bowiem często już gdzieś zdefiniowane – trzeba tylko wiedzieć, gdzie ich poszukać:

  • W C/C++ mamy M_PI, M_E, a nawet M_LN10 czy M_SQRT2 zdefiniowane w math.h lub cmath. Definicje te nie są jednak częścią standardu, więc dbające o zgodność kompilatory (czyli większość kompilatorów w ogóle) wymagają pewnych #define‘ów przed dołączeniem ww. nagłówków. I tak dla Visual C++ jest to _USE_MATH_DEFINES, a dla GCC bodajże prawie dowolne z makr _SOURCE (jak _GNU_SOURCE czy _ALL_SOURCE).
  • W DirectX mamy tylko DX3DX_PI i D3DX1BYPI (1/π) – co nie dziwi, bo przecież w grafice więcej do szczęścia nie potrzeba ;) Obie te stałe są zdefiniowane w d3dx#math.h (gdzie # to numer wersji DirectX), który to nagłówek jest dołączany automatycznie jeśli korzystamy z D3DX.
  • W .NET mamy stałe PI i E zdefiniowane jako statyczne pola klasy System.Math. W Javie klasa java.lang.Math zawiera dwa identycznie zdefiniowane pola.

Jak zatem łatwo zauważyć, wynajdywanie koła w postaci definicji π czy e jest w wielu przypadkach nieuzasadnione :]

Be Sociable, Share!
Be Sociable, Share!
Tags: ,
Author: Xion, posted under Math, Programming »


13 comments for post “Skąd wziąć matematyczne stałe”.
  1. revo:
    May 9th, 2009 o 13:18

    A jak najprościej poradzić sobie ze znajdowaniem wartości stałych matematycznych? Ja używam do tego gogle ;)

    Wystarczy wpisać np. e^gamma i dostajemy ładny wynik z kalkulatora przed odpowiedziami.

  2. czoper:
    May 10th, 2009 o 9:45

    uses Google.Constants;

    i potem w kodzie

    var pi = Google.PI;
    var e = Google.E;

    ;)

  3. Charibo:
    May 10th, 2009 o 20:50

    Co za różnica czy użyjemy własnych defines, czy defines kogoś innego? Te stałe są i tak stałe. ;P

  4. agent_J:
    May 10th, 2009 o 21:54

    @Charibo: o to, że niektórzy uprawiają bezmyślną silnikologię (klepacze kodu …).

  5. Dabroz:
    May 11th, 2009 o 19:20

    Nie lepiej tak?

    static public double Pi
    {
    get
    {
    Application.CurrentCulture = new System.Globalization.CultureInfo(“en-US”);
    System.Net.WebClient wc = new System.Net.WebClient();
    var s = wc.DownloadString(“http://google.com/search?q=pi”);
    s = s.Substring(s.IndexOf(“pi =”) + 4);
    s = s.Substring(0, s.IndexOf(“<“));
    return double.Parse(s);
    }
    }

  6. Riddlemaster:
    May 12th, 2009 o 18:13

    Eej silnikologia wcale nie musi być bezmyślna ;) – nawet jeśli samemu zdefiniujemy takie stałe to nie zawsze jest to złe. Zwłasza jeśli ktoś sobie pisze własną bibliotekę matematyczną do silnika (a robi to praktycznie każdy), to głupio byłoby gdyby zabrakło w niej liczby pi…

  7. Aithne:
    May 14th, 2009 o 21:11

    A ja nawet cmath ostatnio nie mam i daję sobie radę… Zlinczujecie mnie za to, że mam własną implementację libc?

  8. Charibo:
    May 17th, 2009 o 16:18

    To już któraś twoja własna implementacja rzeczy których nie potrzeba implementować samemu. Zamiast licznować, pogratuluję wytrwałości. ;)

  9. crayze:
    May 18th, 2009 o 12:11

    zdefiniowanie własnej stałej matematycznej, to bezmyślne klepanie kodu i wynajdywanie koła na nowo?
    chyba niektórzy już całkiem nie mają się czego czepić…
    LOL && OMG
    znacznie dłużej szukałbym nazwy tego makra które trzeba ustawić żeby mieć stałe z cmath, niż znalezienie wartości pi czy e i klepnięcie sobie stałej z tego

  10. Aithne:
    May 18th, 2009 o 12:16

    Charibo, to pisz OS korzystając z kompilatorowego libc, powodzenia.

  11. Charibo:
    May 18th, 2009 o 18:06

    Obstaję przy swoim – nadal gratuluję wytrwałości.

  12. Aithne:
    May 18th, 2009 o 20:40

    Ja też obstaję przy swoim – wyboru zbytnio nie mam, przy kodzeniu OSa aż tak wiele funkcji libca się nie używa, ale te kilka używanych TRZEBA napisać samemu. Amen.

  13. Charibo:
    May 18th, 2009 o 22:34

    Dobrze wiedzieć. ( ;) )

Comments are disabled.
 


© 2023 Karol Kuczmarski "Xion". Layout by Urszulka. Powered by WordPress with QuickLaTeX.com.