プロジェクト

全般

プロフィール

MinGWでlong double型をprintfで表示させる方法 » 履歴 » バージョン 2

開発 次郎, 2025/05/04 00:16

1 1 開発 次郎
h1. MinGWでlong double型をprintfで表示させる方法
2
3
30!を表示させるmain.cppで、long double型を正しく表示されないことがある。
4
5
正確には「265252859812191058647452510846976.000000」と表示されるはずだが、
6
「0.000000」と表示されてしまう。
7
8
MinGWだと内部でWindowsのruntimeで出力しようとしているのが原因っぽい。 Windowsだとsizeof(long double) == 8だけど、MinGWのgccだとsizeof(long double) == 16だから不整合が起きる。
9
10 2 開発 次郎
解決策は-D__USE_MINGW_ANSI_STDIOのオプションをコンパイル時に指定すればいい。
11
12
こうすればANSI規格かなんかになっているstdioを優先して使ってくれるような感じで上手くいくっぽい。
13 1 開発 次郎
14
h2. 参考情報
15
16
* 解決策
17
** https://hiziriai.hatenablog.com/entry/2018/05/02/231306
18
** https://stackoverflow.com/questions/4089174/printf-and-long-double#4089220
19
* 解決しなかった方法
20
** コンパイルオプション(-ansi)では解決しなかった
21
** https://teratail.com/questions/181188