TikZ fpu seems to be inaccurate
The PGF floating point module is inaccurate, as it uses TeX arithmetic, so it doesn't go beyond five decimal digits. It is not meant as an all-purpose floating point arithmetic tool, but just to do typesetting.
Use xfp
.
\documentclass{article}
\usepackage{tikz}
\usepackage{xfp}
\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}
{
\pgfmathsetmacro{\UABmValues}{\UABmValues[\i]}
\i, $\fpeval{-25500 / (\UABmValues / 1000 - 255 / 52) - 5200 - 3.0897 / 8 * \k}$\par
}
\end{document}
You can try fp, xfp (see egreg's answer) or lua
1) update : version with lua
% !TEX TS-program = lualatex
\documentclass{scrartcl}
\usepackage{pgffor,pgfmath}
\def\luafun#1#2{
\directlua{
x = #1;
y = #2;
r=-25500/(x/1000-255/52)-5200-3.0897/8*y
tex.print(r)}
}
\begin{document}
\def\UABmValues{{14.9, 15.8, 17.7, 18.3, 19, 20, 21.1, 22.2, 24.3, 26.9, 30.1}}
\foreach[count = \i from 0] \k in {30, 35, ..., 80}
{
\pgfmathsetmacro{\myval}{\UABmValues[\i]}%
\luafun{\myval}{\k}\par
}
\end{document}
2) old version with fp
\documentclass{scrartcl}
\usepackage{tikz,fp}
\newcommand\pgfmathparseFP[1]{
\begingroup
\FPeval\pgfmathresult{(#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}
{
\pgfmathsetmacro{\myval}{\UABmValues[\i]}%
\pgfmathparseFP{-25500/(\myval/1000-255/52)-5200-3.0897/8*\k}\i, \pgfmathresult\par
}
\end{document}
An implementation with the CAS Sage(math) and SageTeX:
I use arara: sagetex for compiling.
% arara: pdflatex
% arara: sagetex
% arara: pdflatex
\documentclass{scrartcl}
\usepackage{sagetex, amsmath}
\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}}
\section{pgfmath}
\foreach[count = \i from 0] \k in {30, 35, ..., 80}
{
\pgfmathsetmacro{\UABmValues}{\UABmValues[\i]}
\pgfmathparseFPU{-25500 / (\UABmValues / 1000 - 255 / 52) - 5200 - 3.0897 / 8 * \k}\noindent\i, \UABmValues, \pgfmathresult \\
}
\section{SageTeX}
\subsection{Sage-Output}
$\sagestr{MyOut}$
\subsection{From sageblock or sagesilent}
\begin{sageblock}
Val = ([14.9, 15.8, 17.7, 18.3, 19, 20, 21.1, 22.2, 24.3, 26.9, 30.1])
## Test:
#print Val[1]
#print len(Val)
# Function
f(x,y) = -25500/(x/1000 - 255/52) -5200 -3.0897/8 *(30+5*y)
# Short Output
#for i in range (len(Val)): print i,',',float(Val[i]),',', f(Val[i],i)
# Better Output
data = [(i, float(Val[i]), f(Val[i],i)) for i in range(len(Val))]
data_str = [', '.join(map(str, t)) for t in data]
data_str = '\n'.join(data_str)
MyOut = latex(data_str)
#print data_str
\end{sageblock}
\end{document}