Lua 中 Pi 小数点后 16 位的值不正确

Lua 中 Pi 小数点后 16 位的值不正确

以下是代码。

\documentclass{article}
\usepackage{luacode}
\begin{document}
\luaexec{tex.sprint(string.format('\%.20f', math.pi))}
\end{document}

它的输出为

3.14159265358979311600

很容易看出的值pi不正确。比较这里。小数点后 20 位的正确值为

3.14159265358979323846

luaTeX这与或无关,luacode因为在 中得到的答案相同。这与 的值的计算lua方式有关。有没有办法在 luaTeX 或 lua 中获取 的正确值?luapipi

答案1

来自Lua 手册,第 2.1 节

标准 Lua 使用 64 位整数和双精度(64 位)浮点数,但您也可以编译 Lua,使其使用 32 位整数和/或单精度(32 位)浮点数。整数和浮点数均为 32 位的选项对于小型机器和嵌入式系统尤其有吸引力。

使用双精度时,不能期望超过 15 位精确的小数,请参阅https://en.wikipedia.org/wiki/IEEE_754#Basic_and_interchange_formats

答案2

你可以通过该luamplib包使用 Metapost 来做到这一点。

在此处输入图片描述

\documentclass{article}
\usepackage{luamplib}
\mplibtextextlabel{enable}
\mplibnumbersystem{decimal}
\begin{document}
This is $\pi$:
\begin{mplibcode}
vardef getpi =
numeric lasts, t, s, n, na, d, da;
lasts=0; s=t=3; n=1; na=0; d=0; da=24;
forever:
  exitif lasts=s;
  lasts := s;
  n := n+na; na := na+8;
  d := d+da; da := da+32; 
  t := t*n/d;
  s := s+t;
endfor
s
enddef;
beginfig(1);
    draw textext(decimal getpi);
endfig;
\end{mplibcode}
\end{document}

但我认为手写数字可能会更容易!

相关内容