Když něco počítám, stávají se někdy pro systém pgf
průběžné výsledky velkými. Lze použít knihovnu fpu
. Četl jsem o tom v TikZ & PGF
příručce (viz strana 627), zde a zde , ale stále se mi zobrazuje tato chyba:
Paragraph ended before `\pgfflt@readlowlevelfloat` was complete.
Co se děje?
Zde je můj kód:
\documentclass{scrartcl} \usepackage{tikz} \usetikzlibrary{fpu} \begin{document} %data values: \def\RTable{{100,100.391,100.781,101.172,101.562,101.953,102.343,102.733,103.123,103.513,103.903,104.292,104.682,105.071,105.46,105.849,106.238,106.627,107.016,107.405,107.794,108.182,108.57,108.959,109.347,109.735,110.123,110.51,110.898,111.286,111.673,112.06,112.447,112.835,113.221,113.608,113.995,114.382,114.768,115.155,115.541,115.927,116.313,116.699,117.085,117.47,117.856,118.241,118.627,119.012,119.397,119.782,120.167,120.552,120.936,121.321,121.705,122.09,122.474,122.858,123.242,123.626,124.009,124.393,124.777,125.16,125.543,125.926,126.309,126.692,127.075,127.458,127.84,128.223,128.605,128.987,129.37,129.752,130.133,130.515,130.897}} %prints the result to the console: \pgfkeys{/pgf/fpu} \foreach \i in {0, ..., 80} { \pgfmathparse{abs(\RTable[\i] - 100 - 3.0897 / 8 * \i)}\i, \pgfmathresult\\ } \pgfkeys{/pgf/fpu=false} \end{document}
Aktualizovat :
Používám makro z zde (díky Schrödingerova kočka ). Podívejte se na moji MWE:
\documentclass{scrartcl} \usepackage{tikz} \usetikzlibrary{fpu} \newcommand\pgfmathparseFPU[1]{ \begingroup \pgfkeys{ /pgf/fpu, /pgf/fpu/output format = fixed } \pgfmathparse{#1} \pgfmathsmuggle \pgfmathresult \endgroup} \begin{document} %data values: \def\UABmValues{{14.9, 15.8, 17.7, 18.3, 19, 20, 21.1, 22.2, 24.3, 26.9, 30.1}} %prints the result to the console: \foreach[count = \i from 0] \k in {30, 35, ..., 80} { \pgfmathparseFPU{-25500 / (\UABmValues[\i] / 1000 - 255 / 52) - 5200 - 3.0897 / 8 * \k}\i, \pgfmathresult\\ } \end{document}
a získejte stále
Paragraph ended before `\pgfflt@readlowlevelfloat` was complete.
chybu. Co se mýlím?
Předem děkuji za vaši pomoc a úsilí!
Komentáře
Answer
Zní to jako úloha pro LaTeX3 FPU:
\documentclass{article} \usepackage{expl3} \ExplSyntaxOn \cs_new_eq:NN \fpeval \fp_eval:n \cs_new_eq:NN \clistitem \clist_item:Nn \cs_new_eq:NN \foreachint \int_step_inline:nnnn \ExplSyntaxOff \begin{document} %data values: \def\RTable{100,100.391,100.781,101.172,101.562,101.953,102.343,102.733,103.123,103.513,103.903,104.292,104.682,105.071,105.46,105.849,106.238,106.627,107.016,107.405,107.794,108.182,108.57,108.959,109.347,109.735,110.123,110.51,110.898,111.286,111.673,112.06,112.447,112.835,113.221,113.608,113.995,114.382,114.768,115.155,115.541,115.927,116.313,116.699,117.085,117.47,117.856,118.241,118.627,119.012,119.397,119.782,120.167,120.552,120.936,121.321,121.705,122.09,122.474,122.858,123.242,123.626,124.009,124.393,124.777,125.16,125.543,125.926,126.309,126.692,127.075,127.458,127.84,128.223,128.605,128.987,129.37,129.752,130.133,130.515,130.897} %prints the result to the console: \foreachint{1}{1}{81}{% #1, \fpeval{abs(\clistitem\RTable{#1} - 100 - 3.0897 / 8 * (#1 - 1))}\\ } \end{document}
(Konvence v expl3
je indexovat od 1, protože se to shoduje s nejběžnějším případem použití: sazba. Proto jsem indexoval seznam z jednoho, ale opravil se na index od nuly pro samotnou rovnici.)
Komentáře
- Dobrý den, @Joseph Wright! Děkuji za odpověď, kterou jsem otestoval. 1. Samozřejmě to funguje, ale proměnná indexu by měla začínat nulou (pro můj speciální účel). 2. Výsledky vaší odpovědi jsou odlišné. Správné výsledky by měly vypadat jako parabola dolů, viz zde . Výsledky vaší odpovědi vypadají jako otevřená vzhůru parabola. Možná dělám něco špatně. 3. Každopádně nemohu ' použít váš odpovězte na mou otázku (viz odkaz výše). Co říkáte?
- @ Su-47 Nevím ' co myslíte o ' odkazu výše '
- Odkaz v bodě 2 pravděpodobně ( tex.stackexchange.com/questions/348739/ … ).
- Dobrý den, @Joseph Wright a @Torbj ø rn T.! Omlouvám se za dlouhou nepřítomnost. Děkuji za vaše komentáře. Torbj ø rn T. má pravdu, myslel jsem tento odkaz . Výsledek je nyní správný. Ale jak jsem řekl ve svém posledním komentáři, nemohu ' t použít výše uvedenou odpověď k vyřešení své další otázky (viz odkaz výše). Pokud správně rozumím, v současné době neexistuje způsob, jak používat pole a
fpu
společně vTikZ
? Existuje jiné řešení, možná jiná datová struktura jako pole?
\pgfkeys{pgf/fpu=false}
nebude dělat to, co říká na plechovce, pokud to nebylo nedávno opraveno.\foreach[count = \i from 0] \k in {30, 35, ..., 80} { \pgfmathsetmacro{\myval}{\UABmValues[\i]} \pgfmathparseFPU{-25500/(\myval/1000-255/52)-5200-3.0897/8*\k}\i, \pgfmathresult\\ }
funguje.fpu
již nepodporuje několik věcí, včetně manipulace s celými čísly a tohoto druhu extrakce seznamu. Musíte tedy položku extrahovat bezfpu
.