最近の TeX バリアントではなぜ浮動小数点演算がサポートされないのでしょうか?

最近の TeX バリアントではなぜ浮動小数点演算がサポートされないのでしょうか?

TeX が考案された当時は、浮動小数点計算の標準規格がなかったと理解しています。しかし、最近では IEEE 754 があります。なぜどの TeX バリアントもこれをサポートしないのでしょうか?

確かに LuaTeX はありますが、IEEE 754 はそれよりずっと前から普及していたので、この質問は正当です。

答え1

このような質問に答えるのは困難です。「なぜだめなのか」の記録は通常、「なぜだ」の記録よりも入手が難しいからです。しかし、合理的な一連の出来事を再構築することはできます。

クヌースは、組版という特定の問題を解決するためにTeXを書いた。コンピュータプログラミングの芸術彼はTeXをチューリング完全なものにしたが、文書作成のモデルはTeXの入力をタイプセッティングに近づけるというものだった。TeXbook についてたとえば、情報を「解決」するアプローチがあることは明らかです。Knuth の使用例も、FPU のようなものを使用するようなものではありません。したがって、彼がこの分野で TeX を拡張しなかったことは驚くことではありません。

(これは下位互換性について言及するのと同じくらい良い点です。新しいプリミティブを追加すると、常に何かが壊れる可能性があります。これは、一部のユーザーが\fpexpr自分で定義したはずです。ただし、TeX90 のようなアーカイブ安定した製品では、変更によって他の場所に新しいバグが発生する可能性があるという大きなリスクがあります。「壊れていないものは修正しない」が基本理念です。)

クヌース以降のエンジン開発者は皆、関心のある特定の問題を抱えていた。重要なのは、これらの問題は私たちができない組版自体の外で簡単に解決できます。浮動小数点の作業は実際にはその範囲には入りません。「本格的な」作業であれば、いずれにしても専門のツールで前処理することが合理的に期待できます。

エンジン開発における主要な取り組みを見ると、FPUを具体的な目標として追加することはほとんど考えられなかったことがわかります。アイデアを大まかに時系列順に並べると

  • e-TeXは、TeXプログラミングをサポートする上で非常に一般的なアイデア(\protected、新しいレジスタ範囲、) は、TeX90 の既存のアイデアに基づいています。ここで重要なのは、\numexprなどが追加された一方で、いくつかの演算子 ( +-*/、) が提供され、括弧のみが既存のプリミティブに直接マッピングされないことです。FPU は、より多くのものをカバーする必要があります()
  • e-TeXは、組版に近いコードも追加します。例えば、行頭文字/孤立文字の制御を複数行に拡張したり\middle: 必要なFPUサポートからは非常に遠い
  • pdfTeXは直接PDF出力を追加しました。また、さまざまなユーティリティの追加も含まれていますが、そのほとんどはサポートライブラリからのアイデアの些細な公開です(経過時間など)。
  • XeTeX(および以前のプロジェクト)は、TeXを拡張してUnicodeをサポートします。文字の範囲に焦点を当てており、さまざまなスクリプトを扱うためのアイデアが含まれています。
  • XeTeXはシステムフォントのサポートも追加します。これもFPU作業とは関係ありません。
  • LuaTeXは上記を行い、Luaを使用してTeXの内部を公開します。FPUの追加は後者の統合の結果ですが、これらの取り組みの主な推進力ではありません。

したがって、全体として、実際にエンジンの作業を行っている人々にとって、LuaTeX 以前に FPU を追加する明確な場所がなかったことがわかります。さらに、ユーザー コミュニティからのプッシュもほとんどありませんでした。マクロでは、さまざまな近似演算を実行できます。たとえば、パッケージを参照してください。trigこれにより、一般的なタイプセッティングで float のサポートが有効になります。より複雑な作業は、専門ツールの仕事として考えるのが最適です。見栄えの良い結果をタイプセッティングするのは素晴らしいことですが、さらに分析を行う場合は、対話型のアプローチが必要になる可能性があります。などのパッケージを使用すると、pgfplotsこの種の作業に TeX を使用するのが簡単になります (これが私のワークフローです)。ただし、複雑なタイプセッティングの課題の範囲外では、FPU サポートはかなりニッチです。

(ライブラリのサポートなしで FP 関数の完全な範囲を実装するのは簡単ではないことも指摘しておく価値があると思います。これはl3fp仕事の経験からの話です。この作業の魅力は、エンジン開発の専門家にとってはあまり高くないかもしれません。マクロ レイヤーでそれを実行するのは、興味深い知的挑戦です!)

答え2

それは、下位互換性という聖なる牛を殺すことであり、ドナルド・クヌース自身がビデオで説明している。TeXの安定性の重要性

関連情報