2024/05/02(木)Ubuntu 24.04 インストール (3)
sudo apt install texlive-full最近はplatexを捨ててlualatexを使うようになりました。めんどくさいのでTeX関連はtexlive-fullで全部入れることにしました。
その他文書作成関連のソフトウェアをついでに入れました。
sudo apt install gv sudo apt install nkf sudo apt install gnuplot sudo apt install tgif sudo apt install gimp sudo apt install inkscape sudo apt install mimetex sudo apt install latexdiff sudo apt install diffpdf sudo apt install pdfarranger sudo apt install krop sudo apt install pdftk-java sudo snap install pintapdfarranger, kropm pdftk-javaはいずれもpdfの編集ツール、pintaはペイントツールです。pintaはaptから消えて、snapで入れるようになったようです。
2024/05/02(木)Ubuntu 24.04 インストール (2)
- デスクトップのリサイズ、
- ホストOSとのクリップボード共有(文字列のコピペが出来るようになる)、
- フォルダ共有
sudo apt install open-vm-tools-desktopとしましょう。
共有フォルダは、vmwareの「VM→Settings→Option→Shared Folders」をAlways Enabledにし、Addで適当なフォルダを共有フォルダに指定、再起動。
sudo vmhgfs-fuse -o allow_other -o auto_unmount .host:/ /mnt/hgfsで/mnt/hgfs以下にマウント出来ました。永続的にmountするには、/etc/fstabで
.host:/ /mnt/hgfs fuse.vmhgfs-fuse allow_other,auto_unmount,defaults 0 0と書くとよいでしょう。
2024/05/02(木)Ubuntu 24.04 インストール (1)
Ubuntuの24.04というのは2024年4月のバージョンという意味です。Ubuntuは22.04, 22.10, 23.04...のように半年に一度新しいものが出ますが、基本的に9ヶ月のサポート期間のところ、偶数年の4月に出るバージョン(LTS)は5年のサポート期間があります。Ubuntu 24.04は、2024年4月25日にリリースされました。
インストール用のisoファイルは、http://releases.ubuntu.com/24.04/からubuntu-24.04-desktop-amd64.isoをダウンロードしました。
インストールは、Linux版のVMwareで行ったので、メニューの項目が英語になってます。File→New Virtual Machine→Create a New Virtual Machine→Typical (recommended)
→I will install the operationg system later→Linux→Ubuntu 64bitの手順で仮想マシンを作成。ディスクはデフォルトの20Gじゃ少ないので512Gに増やしました (ここを多くしても実際に仮想マシン内で使用しない限りホストマシンのディスクを圧迫することはありません)。メモリはとりあえずデフォルトの4Gで (こちらは大きくするだけホストマシンのメモリを食います)。VM→Settings→CD/DVDでダウンロードしたisoをマウントし起動。
- 「Install Ubuntu」とし、言語は「日本語」を選ぶ。
- キーボードレイアウトは「日本語」「日本語」
- アクセシビリティは、何もせず「Next」
- インターネットの接続方法は「有線接続を使用」
- 「Ubuntuをインストール」「対話式インストール」
- インストールセットは、「既定の選択」(最小限のWebブラウザーと基本的なユーティリティのみです。)と、「拡張選択」(オフィスツール、ユーティリティにWebブラウザーを含み、オフラインに優しい選択です。)が選べるようになっていましたが、「拡張選択」
- 「グラフィックスとWi-Fi機器用のサードパーティ製ソフトウェアをインストールする」、「追加のメディアフォーマット用のサポートをダウンロードしてインストールする」をチェック。
- 「ディスクを削除してUbuntuをインストールする」を選ぶ。
- ユーザ作成時、「ログイン時にパスワードを要求する」はチェックしたままにする。
- タイムゾーンは「Asia/Tokyo」
とりあえず端末を出すには、右下の丸いアイコンをクリックして「端末」を選びます。右クリックして「お気に入りへ追加」するといいでしょう。
日本語をかな漢字変換で入力するには、インストール直後の一回だけ、右上の「ja」をクリックして、「日本語(Mozc)」を選ぶ必要があります。
2024/02/07(水)g++-13と_Float64xとkv-0.4.56
今回は問題発生への対処です。ある人から、g++ version 13でkvがまったくコンパイルできない、clang++では問題ないと連絡が来ました。実際、ubuntu 23.10を入れて試してみると、test-rounding.ccとかtest-interval.ccみたいな基本的なプログラムすらコンパイルエラーになってしまいました。
調べてみると、_Float64x (IntelのFPUが持っている80bit拡張浮動小数点数) の関係する部分がエラーになっています。kvどころか、
#include <iostream> int main() { _Float64x a; std::cin >> a; }みたいな単純なプログラムがコンパイルエラーになってしまいます。また、
#include <iostream> #include <limits> int main() { std::cout << std::numeric_limits<_Float64x>::epsilon() << std::endl; std::cout << std::numeric_limits<_Float64x>::max() << std::endl; std::cout << std::numeric_limits<_Float64x>::min() << std::endl; std::cout << std::numeric_limits<_Float64x>::infinity() << std::endl; std::cout << std::numeric_limits<__float80>::epsilon() << std::endl; std::cout << std::numeric_limits<__float80>::max() << std::endl; std::cout << std::numeric_limits<__float80>::min() << std::endl; std::cout << std::numeric_limits<__float80>::infinity() << std::endl; std::cout << std::numeric_limits<long double>::epsilon() << std::endl; std::cout << std::numeric_limits<long double>::max() << std::endl; std::cout << std::numeric_limits<long double>::min() << std::endl; std::cout << std::numeric_limits<long double>::infinity() << std::endl; }は、
0 0 0 0 1.0842e-19 1.18973e+4932 3.3621e-4932 inf 1.0842e-19 1.18973e+4932 3.3621e-4932 infのように、numeric_limits<_Float64x>はすべて0を返してきます。
調べてみると、「_Float64xをサポートしているのはgccのみで、もともとg++では_Float64xをまったくサポートしていなかった。しかしversion 12までは単なるlong doubleのtypedefだったので、たまたまg++でも動いてしまっていた。最新のg++ version 13では_Float64xを部分的にサポートするようになったがlibstdc++はサポートしていない状態になり、結果的にまったく使えなくなってしまった」ということのようです。やりとりはこの辺。
gccのドキュメントの6.12 Additional Floating Typesでは、「As an extension, GNU C and GNU C++ support additional floating types, (中略) _float80 is available on the i386, x86_64, and IA-64 targets, and supports the 80-bit (XFmode) floating type. It is an alias for the type name _Float64x on these targets. 」とはっきり書いているので、g++でも_Float64xはサポートされているように見えるのですが。
IntelのCPUではlong double、__float80も_Float64xと同じ80bit拡張浮動小数点数です。こっちの2つはg++-13でも生き残っています。どちらかで全部書き換えることも考えたのですが、long doubleは異なるアーキテクチャだと異なる浮動小数点数フォーマットに対応していることが多く、トラブルを招く可能性が高い、__float80はgccのみのオリジナル拡張でclangで使えない、とそれぞれ問題があります。
もっともメジャーで、4月にはみんながubuntu 24.04を使い始めることを考えると、g++-13で動かないなんてのは使い物にならないも同然なので、緊急にkv-0.4.56をリリースしました。とりあえず最低限の変更で、g++-13では_Float64x関連の機能が全部働かないようにしました。g++-12以下ではすべて問題なく、g++-13では_Float64xを使う機能を除いてすべてコンパイルできるようになりました。他の変更は、ついでにoptimize.hppにちょっとした追加機能が入ったくらいです。
g++-14以降でちゃんと戻ることを祈るのみですが、こんなIntel CPUにしかない盲腸のような機能を使おうとするほうが悪い、という話でもあるのかな。