common_logarithm と natural_logarithm を変更して、構造体ではなくポインターを渡すようにしました。そのままポインタを渡していたのかもしれませんが、実際の mpf_t が何であるかを判断するのは困難です。とにかく、これにより、キャサリンが抱えていた問題がより明確になります。
Michael Richmond は、Cygwin ツールを使用して g95 のコンパイルが成功したことを報告し、成功を報告しています。この場合、同じ場所にコア ダンプがあります….:)
他のニュースでは、少なくとも当分の間、geompack をあきらめました。あいまいな問題を 3 日間デバッグした後、geompack を説明する論文のテスト ケースで、数百から数千のポイントを含むセットが使用されていることに気付きました。もちろん、数万点から数十万点を使っているので、微妙な問題が発生する機会が増えます。今日は設計図に戻り、数週間前にあまりにも早くあきらめたと思われる別の方法を再実装しました。商用のグリッド ジェネレーターが 10,000 ドルから始まり、そこから高額になる理由がわかり始めています…
自動テスト スイートは非アクティブのようです。Rob はアラスカに引っ越している最中だと思います…
5月3日
私は今学期の卒業をほとんどあきらめており、私の委員会のさまざまな人が夏の間さまざまな時期に去っていったので、次の卒業時期は夏の終わりのようです.
私はここ数週間、fortran 77 で多くの開発作業を行ってきました。これにより、無料の fortran 95 コンパイラが必要であるという私の確信が強まりました。g95 の開発を形作ることになるいくつかの偶然が起こりました。
geompack はほとんどの場合動作しているように見えますが、私が指定した一連のポイントにはまだ問題があります。私はこの問題を計算幾何学特有の問題である固定精度の算術演算にまで突き止めました。たとえば、geompack が必要とすることの 1 つは、3 つの空間内の点が他の 4 つの点によって定義される球内に含まれているかどうかを確認するテストです。すべてのテストは、3 次元または 4 次元の行列式として記述できます。これ自体は、点の座標のかなり小さく単純な関数です。
球検定の場合、行列式は、外側にある場合は正、内側にある場合は負、球の表面に正確にある場合はゼロです。ほとんどの場合、これで問題なく動作しますが、固定精度演算で評価したときに式が間違った答えを返すポイントの配置があります。
いくつかの代替案を調査した後、通常の倍精度浮動小数点数を使用して元の数量を計算し、計算によって不確実性を伝播する手法に落ち着きました。結果の大きさが不確実性よりも大きい場合は、その結果を使用します。それ以外の場合は、丸めを行わないより精巧な計算を使用して計算を繰り返す必要があります。
私が読んだ論文の 1 つは、代入ステートメントを変換して複数の精度のサブルーチンへのサブルーチン呼び出しを生成する単純な式パーサーを作成したことによる輝かしい成功を報告しています。これを使用して、不確実性を正しく伝播するコードを生成することもできると思いました。そのため、午前 0 時 30 分に、Fortran 標準を読み、g95 の式パーサーを見て、簡単なパーサーの書き方を思い出しました。200 行の Python の後、ある種のミニ コンパイラができました。
何年も前に Priest によって行われたいくつかの作業を改善した Shewchuk のおかげで、私は倍精度技術を使用しています。これらは、浮動小数点演算に関するかなりハードコアな論文であり、g95 が物事を処理する方法に影響を与えると思います。Priest と Shewchuk のアルゴリズムは、通常の中間 80 ビット実数を使用する 80×87 では機能しないことが判明しました。
コンパイラがデフォルトで正しいことをしようとすることは重要だと思いますが、ユーザーが「購入したハードウェアを使用して」Bill Kahan から言葉を借りることができるようにすることも重要だと思います。x87 ファミリ用の REAL*10 と、必要に応じて 80 ビットまたは 64 ビットの double をメモリにスピルするオプションがいつか見たいと思っています。Craig Burley は、g77 を書いていたとき、非常に明快で理にかなった議論を双方で行っていましたが、これによって本当に何度も何度も打ちのめされました。
また、Michael Richmond によって以前報告された 2 つのバグも修正しました。