发现了MinGW GCC的一个bug

我今天发现MinGW内置的打印函数__mingw_printf在处理%a格式的时候会产生不正确的输出。下面这段程序体现了这个问题。

#include <stdio.h>
#include <stdarg.h>

int main()
{
	printf("%a %a\n", 1.0, 1.1);
	__mingw_printf("%a %a\n", 1.0, 1.1);
	return 0;
}

输出是

0x1.000000p+0 0x1.19999ap+0
0x0p-63 0x8.cccccccccccdp-3

因为浮点数1.0显然不能表示为0x0p-63,所以__mingw_printf是错的。

这个错误我提交在 http://sourceforge.net/p/mingw-w64/bugs/459/ ,过几天我看看有没有人回应。

继续阅读 →