2026/05/30(土)kv-0.4.60
今回は、g++-13での仕様変更により0.4.56からg++-13以上で利用できなくなっていた、Intel 80bit浮動小数点数のサポートを復活させました。
以前は、Intel FPUに盲腸のように存在してる80bit浮動小数点数を_Float64xという型で記述して活用していましたが、g++-13から、
#include <iostream>
int main()
{
_Float64x x;
std::cin >> x;
}
みたいな簡単なプログラムさえコンパイルできなくなっていました。仕方ないのでg++-13以上ではこの機能を抹消していたのですが、long doubleを使えば問題なく動いていたので、今回ソースコード中の_Float64xを全部書き直しました。また将来状況が変わって振り回されるのは嫌なので、kv::fp80というaliasを作って全部それで書くことにして、状況が変わったらすぐにまた変更できるように備えました。80bit(仮数部64bit)の浮動小数点数を使って区間演算をしたり、2つ束ねて仮数部128bitの疑似拡張4倍精度を使ったり、またその疑似拡張4倍精度を端点に持つ区間演算をしたり、結構面白いことができます。もちろんmpfrを使えばもっと高精度にすることもできますが、mpfrより速度低下がずっと小さいです。doubleやddじゃ微妙に精度が足りないが、mpfrでは遅すぎるというギリギリのケースで役に立ちことがあるかもしれません。