Quando eu calculo algo, às vezes torna os resultados provisórios muito grandes para o sistema pgf
. Pode-se usar a biblioteca fpu
. Li sobre isso no TikZ & PGF
manual (consulte a página 627), aqui e aqui , mas ainda recebo este erro:
Paragraph ended before `\pgfflt@readlowlevelfloat` was complete.
O que está errado?
Aqui está meu código:
\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}
Atualizar :
Estou usando uma macro aqui (graças a Gato de Schrödinger ). Veja meu 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}
e ainda obtenha um erro
Paragraph ended before `\pgfflt@readlowlevelfloat` was complete.
. O que estou errado?
Obrigado por sua ajuda e esforço antecipadamente!
Comentários
Resposta
Parece um trabalho para a FPU LaTeX3:
\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}
(A convenção em expl3
é indexar de 1, pois isso se alinha com o caso de uso mais comum: composição. Portanto, indexei a lista de um, mas corrigi para indexar de zero para a própria equação.)
Comentários
- Olá @Joseph Wright! Obrigado pela sua resposta, eu testei. 1. Claro que funciona, mas a variável de índice deve começar por zero (para meu propósito especial). 2. Os resultados da sua resposta são diferentes. Os resultados corretos devem ser parecidos com uma parábola para baixo, consulte aqui . Os resultados da sua resposta parecem uma parábola aberta para cima. Talvez eu tenha feito algo errado. 3. De qualquer forma, não posso ' usar seu responder à minha pergunta (veja o link acima). O que você diz?
- @ Su-47 Eu não ' não sei o que você quer dizer sobre ' o link acima '
- O link no ponto 2 provavelmente ( tex.stackexchange.com/questions/348739/ … ).
- Olá @Joseph Wright e @Torbj ø rn T.! Desculpe pela longa ausência. Obrigado por seus comentários. Torbj ø rn T. está certo, eu quis dizer este link . Agora o resultado está certo. Mas, como disse em meu último comentário, não posso ' usar a resposta acima para resolver minha outra pergunta (consulte o link acima). Se bem entendi, no momento não há como usar matrizes e
fpu
juntos emTikZ
? Existe outra solução, talvez uma outra estrutura de dados como arrays?
\pgfkeys{pgf/fpu=false}
não fará o que diz na lata a menos que tenha sido corrigido recentemente.\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\\ }
funciona. A partir de agora,fpu
não oferece suporte a algumas coisas, incluindo manipulação de inteiros e este tipo de extração de lista. Portanto, você precisa extrair a entrada semfpu
.