pgfplotstable 的 create col/expr 不会在常量上调用 fpu

pgfplotstable 的 create col/expr 不会在常量上调用 fpu

我必须承认,我经常因 pgfplots(table) 的有限数值精度问题而感到困惑。我知道这\pgfset{fpu}会激活 IEEE 双精度单位。此外,最新手册 (v1.15) 指出:

此 FPU 也是 PgfplotsTable 的一部分,并且默认情况下它被激活以创建 col/expr ...

话虽如此,请帮助我理解有关以下 MWE 的问题。请注意 的三种不同表达方式create col/expr={abs(...)}

\documentclass{article}
\usepackage{pgfplotstable}

\begin{filecontents}{table.csv}
values
392.50271975
392.5024343
392.5016196
392.5005834
392.4992593
\end{filecontents}

\pgfplotstableread[col sep=comma]{table.csv}\myerrortable

\pgfplotstableset{
    create on use/error/.style={
        create col/expr={
            abs(785/2 )%-\thisrow{values})
            %abs(392.5-\thisrow{values})
        }
    },
}


\begin{document}
\pgfplotstabletypeset[
    columns={error},
    columns/error/.style={
        column name={error},
        fixed,
        precision=8,
    },
    ]\myerrortable
\end{document}
  1. abs(785/2 )= 392.499:为什么只打印了三位数字?这看起来不像是使用了 fpu。
  2. abs(785/2 -\thisrow{values})= 0.00372, ...:如您所见,该values表包含更多精度数字,并且它们被部分使用。由于 的精度有限,错误总是出现在第三位数字中785/2。那么,为什么785/2限制为 3 位数字,而 限制values为 5 位数字呢?
  3. abs(392. - \thisrow{values})= 0.00272, ...:如果直接使用 785/2 的正确结果,则输出现在对于给定的 5 个精度数字是正确的。但为什么只有 5 位数字?values列包含更多数字,而我要求 8 位。我以为 fpu 给出了完整的双倍的精确?

答案1

您可以使用expl3FPU 来解决这个问题(例如,如何使用 TikZ fpu 库?)。

梅威瑟:

\documentclass{article}
\usepackage{pgfplotstable}
\pgfplotsset{compat=1.15}
\usepackage{expl3}
\ExplSyntaxOn
\cs_new_eq:NN \fpeval \fp_eval:n
\ExplSyntaxOff
\begin{filecontents}{table.csv}
values
392.50271975
392.5024343
392.5016196
392.5005834
392.4992593
\end{filecontents}

\pgfplotstableread[col sep=comma]{table.csv}\myerrortable
\pgfplotstableset{
    create on use/error/.style={
        create col/expr={
            \fpeval{abs(785/2-\thisrow{values})}
        }
    },
}

\begin{document}
\pgfplotstabletypeset[
    columns={values,error},
    columns/values/.style={column name={value},fixed,precision=8,},
    columns/error/.style={column name={error},fixed,precision=8,},
    ]\myerrortable
\end{document}

结果:

在此处输入图片描述

相关内容