LaTeX3 における整数と浮動小数点の精度

LaTeX3 における整数と浮動小数点の精度

L3fp パッケージは、randintパラメータの範囲を とすることを提案しています+- 10^16 - 1が、 に制限されているようで+-2^31 - 1、それを超える値を指定するとNumber too bigコンパイル エラーが発生します。一方、fp値については、期待どおりの 16 進数桁の精度が得られています。なぜでしょうか。

\documentclass{article}
% RN. 15 April 2017
% BRIEF DESCRIPTION:
%=======================
\usepackage[check-declarations]{expl3}
\usepackage{xparse}
%-----------------------
\ExplSyntaxOn
\int_new:N \l_rn_someInteger_int
\fp_new:N \l_rn_someFp_fp
\NewDocumentCommand\mySetInteger{m}
  {
    \int_set:Nn \l_rn_someInteger_int {#1}
    some~integer:~\int_use:N \l_rn_someInteger_int\\
    \int_set:Nn \l_rn_someInteger_int {\fp_eval:n {randint(#1)}}
    some~random~integer:~\int_use:N \l_rn_someInteger_int\\
    \fp_set:Nn \l_rn_someFp_fp {\fp_eval:n {rand()}}
    some~random~real:~\fp_use:N \l_rn_someFp_fp\\
    -------------------------------------------\\
  }
\ExplSyntaxOff
%-----------------------
\begin{document}
    \mySetInteger{1234}
    \mySetInteger{2147483647}

%   \mySetInteger{2147483648}
%   \mySetInteger{9999999999999999}
\end{document}

答え1

l3fp浮動小数点式がどのように格納されるかを見てみましょう。

\documentclass{article}
\usepackage{xfp}

\begin{document}

\ttfamily

\ExplSyntaxOn % we want to do tests

\fp_set:Nn \l_tmpa_fp { randint(10^15,10^15+10^12) }

\fp_eval:n { \l_tmpa_fp }

\par

\cs_meaning:N \l_tmpa_fp

\ExplSyntaxOff

\end{document}

ある実験では、

ここに画像の説明を入力してください

これは、範囲が -2 31から 2 31 -1 までに制限されているため、ランダムな整数が TeX の本来の意味で整数として保存されないことを示しています。

整数変数に上記の範囲外の値を割り当てることはできません。

「浮動小数点整数」で演算する場合、演算を実行するときに浮動小数点演算の標準的な制限が適用されます。

同様randintに に変更した後rand

ここに画像の説明を入力してください

数値は、指数と、仮数部用の 4 桁の 4 つのグループとともに格納されます。 2 つの内部関数\s__fpと は、\__fp_chk:w数値を (拡張可能に) 操作するために使用されます。 ターミネータは、;内部表現を終了します。

答え2

数はちょうど で2147483648あり2^31、変数は実際には TeX カウント レジスタであり、通常のカウンター\int_...と同様に「制限された」数値範囲を持ち、数はちょうどです。LaTeX- 2^{31} to 2^{31} - 12^32

expl3 がロードされたファイルの .log ファイルを調べると、\int...マクロが実際には定義であることがわかります\countXYZ

保存しようとすると、2147483648同様にオーバーフローが発生します\setcounter{foo}{2147483648}

浮動小数点数は次元レジスタとして異なる方法で保存され、より大きな数値を許可しますが、精度は向上しません。

ぜひご覧くださいLaTeX カウンターに保存できる最大の整数はどれくらいですか?同じように。

関連情報