内部エラーの原因となったモジュール プロシージャを含む小さなプログラム

Alvin Brattli は、内部エラーの原因となったモジュール プロシージャを含む小さなプログラムについて書き込みました。問題を修正したところ、実際にはまだモジュール プロシージャを呼び出すことができないことがわかったので、次はそれについて説明します。

ステートメント関数も実装しました。これは、NIST テスト スイートの現在の障害であり、現在のテスト スイートにそれらをさらに追加しました。

 


2月17日

内部手続きのサポートを追加しました。いくつかのテストを実行したところ、ホストの関連付けを含め、正しく機能しているように見えます。


2月16日

Helge Avlesen さんが、浮動小数点の例外処理に関する問題を報告しました。非正規化例外はマスクされておらず、非正規化された数値はアンダーフローの状況で表示されます。Linux カーネルはまた、デノーマルをアンダーフローとして報告し (そうではありません)、状況をさらに混乱させます。うまくいけば、これは修正されました。

SIGINT および SIGHUP シグナルのシグナル処理は、G95_SIGINT および G95_SIGHUP 環境変数に依存するようになりました。これらは、フォアグラウンド セッションが終了したときにバックグラウンド ジョブが予期せず停止するのを防ぐのに役立ちます。SIGQUIT は影響を受けません。

 


2月15日

組み込み関数を呼び出す新しい、より一般的な方法を取得しました。いくつかの組み込み関数、特に INDEX を追加することから始めて、文字変数の処理方法がまったく機能せず、おそらくそれらの処理を完全に書き直す必要があることに気付きました。

また、整数べき乗の冪乗の信じられないほど単純な実装を置き換えました。指数が n の場合、n-1 回の乗算が実行され、不定形 0**0 は考慮されませんでした。数百万の指数の場合、新しい方法は数百万倍高速です。

その過程で、私はアイデンティティを再発見しました

    lim (1+1/x)^x = e.
    n->inf

また、I/O サブシステムのコーナー ケースのペアを修正しました。1 つは整数の出力に関するもので、もう 1 つはフォーマットされた書き込み中の間違った記述子の取得に関するものです。

 


2月14日

2 日前に言及された浮動小数点トラップの問題を解決しました。これがどのように機能するかです: SIGFPE では、例外を引き起こしたシグナルが出力されます。オーバーフロー アンダーフローなどです。プログラムが正常に終了すると、プログラムの実行中に発生したマスクされた例外が、環境変数 (G95_FPU_EXCEPTIONS) の制御下でオプションで出力されます。これはもともと NAG のイノベーションです。

すべての IEEE-754 例外がサポートされていますが、すべてが役立つわけではありません。私は当初、INEXACT トラップは精度の壊滅的な損失を伴う状況でのみ発生すると長い間考えていました。たとえば、次のようなものです。

 

   実数 :: x, y, 差分
   x = 12345678.0
   y = 12345677.0
   差分 = x - y

その場合、「diff」には有意なビットがほとんど残っていません。ただし、次のようなことがわかります。

   実数 :: x, y, 合計
   x = 1.0d0
   y = 0.1d0
   合計 = x + y

約 3 ビットしか失われませんが、例外もトリガーされます。他の例としては、完全な平方数ではない数値の平方根などがあります。これは、このビットがほぼ完全に役に立たないことを意味します。

これが解決されたので、私は Martien のコードを続け、INDEX 組み込みに取り組んでいますが、最初にライブラリ サブルーチンをすべて事前に宣言する必要のない、より一般的な方法で呼び出す方法を探しています。

 

タイトルとURLをコピーしました