## fp

Pakiet zawiera szereg makroinstrukcji umożliwiających prowadzenie obliczeń zmiennoprzecinkowych

Polecenie | Opis
--- | ---
`\FPmessagestrue` | włącza komunikaty (domyślnie)
`\FPmessagesfalse` | wyłącza komunikaty
`\FPdebugtrue` | włącza śledzenie
`\FPdebugfalse` | wyłącza śledzenie
`\FPset#1#2` | podstawienie `#1 := #2` np. `\FPset{wynik}{10.2}`
`\FPprint#1` | podaj wynik \FPset{wynik}{10.2} (np. `\FPprint{wynik}` daje nam `10.2`)
`\FPadd#1#2#3` | dodawanie `#1 := #2 + #3` `\FPadd{\suma}{składnik}{składnik}` (np. \FPset{wynik}{10.2} `\FPadd{\suma}{\wynik}{10.2}` `\FPprint{suma}` daje nam: `20.400000000000000000`
`FPdiv#1#2#3` | dzielenie `#1 := #2 / #3` `\FPdiv{\iloraz}{dzielna}{dzielnik}` (np. \FPset{wynik}{10.2} `\FPdiv{\iloraz}{\wynik}{5.1}` `\FPprint{iloraz}` daje nam: `2.000000000000000000`)
`\FPmul#1#2#3` | mnożenie `#1 := #2 * #3` `\FPmul{\iloczyn}{mnożna}{mnożnik}` (np. \FPset{wynik}{10.2} `\FPmul{\iloczyn}{\wynik}{10.2}` `\FPprint{iloczyn}` daje nam: `104.040000000000000000`)
`\FPsub#1#2#3` | odejmowanie `#1 := #2 - #3` `\FPsub{\różnica}{odjemna}{odjemnik\`} (np. \FPset{wynik}{10.2} `\FPsub{\różnica}{\wynik}{1.2}` `\FPprint{róznica}` daje nam: `9.000000000000000000`)
`\FPabs#1#2` | wartość absolutna `#1 := abs(#2)`
`\FPneg#1#2` | zmiana znaku `#1 := -#2`
`\FPsgn#1#2` | znak wyrażenia `#1 := sgn(#2)`
`\FPmin#1#2#3` | minimum `#1 = min(#2,#3)`
\hline
`\FPmax#1#2#3` | maksimum `#1 = max(#2,#3)`
`\FPe` | wartość stałej Eulera: 2.718281828459045235
`\FPpi` | wartość liczby Pi := 3.141592653589793238
`\FPexp#1#2` | potęga liczby e `#1 := e\^(#2)`
`\FPln#1#2` | logarytm naturalny `#1 := ln(#2)`
`\FPpow#1#2#3` | potęgowanie `#1 := (#2)\^(#3)`
`\FProot#1#2#3` | pierwiastkowanie `#1 := (#2)\^(1/#3)`
`\FPpascal#1#2` | `#1 := #2`-ta linia trójkąta Paskala
`\FPseed=#1` | ustawia punkt startowy ciągu zmiennych losowych generowanych poleceniem `\FPrandom`
`\FPrandom#1` | `#1 :=` liczba losowa z przedziału 0 -- 1
`\FPround#1#2#3` | `#1 := #2` zaokrąglone do `#3` pozycji po kropce dziesiętnej
`\FPtrunc#1#2#3` | `#1 := #2` podstawiewnie z obcięciem do `#3` pozycji
`\FPclip#1#2` | `#1 := #2` podstawiewnie z usunięciem nieznaczących zer
`\FPsin#1#2` | `#1 := sin(#2)`
`\FPcos#1#2` | `#1 := cos(#2)`
`\FPsincos#1#2#3` | `#1 := sin(#3), #2 := cos(#3)`
`\FPtan#1#2` | `#1 := tan(#2)`
`\FPcot#1#2` | `#1 := ctg(#2)`
`\FPtancot#1#2#3` | `#1 := tan(#3), #2 := ctg(#3)`
`\FParcsin#1#2` | `#1 := arcsin(#2)`
`\FParccos#1#2` | `#1 := arccos(#2)`
`\FParcsincos#1#2#3` | `#1 := arcsin(#3), #2 := arccos(#3)`
`\FParctan#1#2` | `#1 := arctan(#2)`
`\FParccot#1#2` | `#1 := arcctg(#2)`
`\FParctancot#1#2#3` | `#1 := arctan(#3), #2 := arcctg(#3)`

`\FPupn#1#2`

`#1 := eval(#2)` `eval` symbolizuje rozwinięcie wyrażenia `#2` zapisanego w `Polskiej Notacji` wewnątrz wyrażenia można używać następujących operatorów: `+`, `add`, `-`, `sub`, `*`, `mul`, `/`, `div`, `abs`, `neg`, `min`, `max`, `round`, `trunc`, `clip`, `e`, `exp`, `ln`, `pow`, `root`, `pi`, `sin`, `cos`, `sincos`, `tan`, `cot`, `tancot`, `arcsin`, `arccos`, `arcsincos`, `arctan`, `arccot`, `arctancot`, `pop`, `swap`, `copy`; gdzie:

`pop` usuwa element ze stosu
`swap` zmienia kolejność pierwszych dwóch elementów
`copy` kopiuje najwyższy element na stosie

np:

        \FPupn\result{17 2.5 + 17.5 - 2 1 + * 2 swap /}

jest równoważne wyrażeniu:

        \result := ((17.5 - (17 + 2.5)) * (2 + 1)) / 2

`\FPeval#1#2` | `#1 := eval(#2)` `eval` symbolizuje rozwinięcie wyrażenia. Wewnątrz mogą być używane nawiasy i znane operatory (w przypadku powyższych definicji należy używać nazw bez prefixu `FP` i backslasha Uwaga: nie działa minus unarny, należy użyć operatora `neg`
`\FPiflt#1#2...\else...\fi` | jeśli `#1 < #2`
`\FPifeq#1#2...\else...\fi` | jeśli sym{#1 = #2}
`\FPifgt#1#2...\else...\fi` | jeśli `#1 > #2`
`\FPifneg#1 ...\else...\fi` | jeśli ujemny (`#1 < 0`)
`\FPifpos#1 ...\else...\fi` | jeśli nieujemny (`#1 >= 0`)
`\FPifzero#1...\else...\fi` | jeśli zero (`#1 = 0`)
`\FPifint#1 ...\else...\fi` | jeśli całkowity (`#1`)
`\ifFPtest ...\else...\fi` | ostatnio wykonany test
`\FPlsolve#1#2#3` | oblicz `#1 := x` tak, aby `#2 * x + #3 = 0`
`\FPqsolve#1#2#3#4#5` | oblicz `#1,#2 := x` tak, aby `#3 * x^2 + #4 * x + #5 = 0`
`\FPcsolve#1#2#3#4#5#6#7` | oblicz `#1,#2,#3 := x` tak aby `#4 * x^3 + #5 * x^2 + #6 * x + #7 = 0`
`\FPqqsolve#1#2#3#4#5#6#7#8#9` | oblicz `#1,#2,#3,#4 := x` tak aby `#5 * x^4 + #6 * x^3 + #7 * x^2 + #8 * x + #9 = 0`

Włodzimierz Macewicz

Ostatnie zmiany: 05.05.2014.