Quando calcolo qualcosa, a volte i risultati provvisori diventano troppo grandi per il sistema pgf. Si può utilizzare la libreria fpu. Ne ho letto nel TikZ & PGF manuale (vedi pagina 627), qui e qui ma ricevo ancora questo errore:

Paragraph ended before `\pgfflt@readlowlevelfloat` was complete. 

Cosa cè che non va?

Ecco il mio codice:

\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} 

Aggiorna :

“Sto utilizzando una macro da qui (grazie a gatto di Schrödinger ). Visualizza il mio 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 ricevi ancora un

Paragraph ended before `\pgfflt@readlowlevelfloat` was complete. 

errore. Cosa sbaglio?

Grazie in anticipo per il vostro aiuto e impegno!

Commenti

  • I ' Non sono sicuro che possa essere risolto, poiché pgfmath converte costantemente avanti e indietro tra testo, registri dimen e registri fpu (motivo per cui lo considero un orso danzante).
  • Ciao a tutti! Nessuno dei professionisti ha una proposta di soluzione?
  • Nota che \pgfkeys{pgf/fpu=false} non farà quello che dice sulla latta a meno che non sia stato risolto di recente.
  • Penso che dovresti fare una nuova domanda su questo dato che hai già una bella risposta. \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\\ } funziona. Al momento, fpu non supporta un paio di cose, inclusa la manipolazione di interi e questo tipo di estrazione dalla lista. Quindi devi estrarre la voce senza fpu.
  • @ Su-47 Penso che la risposta di Alain Matthes sia buona. Si noti che nessuno dei sistemi può realmente competere con un sistema di computer algebra. Una versione radicalmente nuova di TeX richiederebbe per rimuovere veramente i limiti interni, ma AFAIK non cè alcun piano per creare un nuovo TeX. Per favore nota anche che IMHO è meglio aspettare usando Expl3 fino a quando non è in uno stato in cui puoi essere sicuro che quello che hai scritto funzionerà ancora tra un anno da adesso. Dato che sembra che tu stia usando MatLab, puoi sempre produrre i dati con questo strumento e poi tracciarli con pgfplots o datavisualization.

Risposta

Sembra un lavoro per 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} 

(La convenzione in expl3 è quello di indicizzare da 1 in quanto è in linea con il caso duso più comune: la composizione tipografica. Ho quindi indicizzato lelenco da uno ma corretto per indicizzare da zero per lequazione stessa.)

Commenti

  • Ciao @Joseph Wright! Grazie per la tua risposta lho testato. 1. Ovviamente funziona, ma la variabile index dovrebbe iniziare con zero (per il mio scopo speciale). 2. I risultati della tua risposta sono diversi. I risultati corretti dovrebbero apparire come una parabola verso il basso, vedi qui . I risultati della tua risposta sembrano una parabola verso lalto aperta. Forse faccio qualcosa di sbagliato. 3. Comunque non posso ' usare il tuo rispondere alla mia domanda (vedi il link sopra). Che ne dici?
  • @ Su-47 Non ' non so cosa intendi con ' il link sopra '
  • Il collegamento al punto 2 probabilmente ( tex.stackexchange.com/questions/348739/ … ).
  • Salve @Joseph Wright e @Torbj ø rn T.! Scusa per la lunga assenza. Grazie per i vostri commenti. Torbj ø rn T. ha ragione, intendevo questo link . Ora il risultato è giusto. Ma come ho detto nel mio ultimo commento, non posso ' utilizzare la risposta precedente per risolvere la mia altra domanda (vedi il link sopra). Se ho capito correttamente, attualmente non cè modo di utilizzare array e fpu insieme in TikZ? Esiste unaltra soluzione, forse unaltra struttura di dati come array?

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *