pgfmath 舍入误差?

pgfmath 舍入误差?

我正在进行涉及对数和三角函数的特定 pgfmath 计算。

Pgfmath 计算结果为:log10(-cot(97.1)) = -0.90466。我的计算器给出的“真实”答案是 −0.904633,这个答案已经足够接近了。

Pgfmath 计算结果为:log10(-cot(97.2)) = −0.88753。我的计算器给出的“真实”答案是 −0.898495,这完全不同。

我认为这是一种奇怪的舍入误差 - 我能做些什么来解决这个问题吗?(我正在使用这些值来绘制图表,我可以直观地看到这些值有问题。)

梅威瑟:

\documentclass{article}
\usepackage{pgfmath}
\begin{document}

\pgfmathparse{log10(-cot(97.1))}
$\log(-\cot 97.1) = \pgfmathresult$

(true answer: $-0.904633$)

\pgfmathparse{log10(-cot(97.2))}
$\log(-\cot 97.2)= \pgfmathresult$

(true answer: $-0.898495$)

\end{document}

答案1

pgfmath默认情况下,本质上是非常近似的;它使用定点算法,如手册中解释/建议的那样(这是 Ti 的第 1027 页左右Z 手册):

在此处输入图片描述

如果您想要更精确(IEEE 精确)的计算,您可以使用新的 latex3 数学引擎,该引擎在任何较新的 LaTeX 中均可用:

\documentclass{article}
\usepackage{pgfmath}
\begin{document}

\pgfmathparse{log10(-cot(97.1))}
$\log(-\cot 97.1) = \pgfmathresult$ fpeval: \fpeval{ln(-cotd(97.1))/ln(10)}

(true answer: $-0.904633$)

\pgfmathparse{log10(-cot(97.2))}
$\log(-\cot 97.2)= \pgfmathresult$ fpeval: \fpeval{ln(-cotd(97.2))/ln(10)}

(true answer: $-0.898495$)

\end{document}

在此处输入图片描述

(你的第二个结果有一个错误的有趣的舍入)

你也可以使用nice(虽然作者认为是“权宜之计”)包裹pgfmath-xfp

\documentclass{article}
\usepackage{pgfmath}
\usepackage{pgfmath-xfp}

\pgfmxfpdeclarefunction{myfun}{1}{ln(-cotd(#1))/ln(10)}

\begin{document}

\pgfmathparse{myfun(97.1)}
$\log(-\cot 97.1) = \pgfmathresult$

(true answer: $-0.904633$)

\pgfmathparse{myfun(97.2)}
$\log(-\cot 97.2)= \pgfmathresult$

(true answer: $-0.898495$)

\end{document}

在此处输入图片描述

相关内容