见鬼,我决定看看我多年前开始在 Amiga 上编写并在其他机器上进一步开发的程序是否仍然可以在 Amiga 上编译和运行(在其他机器上开发之后)。我最初使用 Lattice C,因为那是我以前使用的。但是 Lattice 对 68881 的支持非常有问题。所以我决定尝试 gcc。我认为 Amiga 的 gcc 最新版本是 2.7.0(所以我无法升级)。它工作得相当好,除了 68881 支持中的一个错误:当任何负数乘以零时,结果总是:
1.:00000
打印出来时(冒号不是错字)。顺便说一句,如果您将 x 设置为零,然后打印出来,它应该是 0.00000。
这是一个测试错误的示例程序,哪个变量是0哪个是负数都没有关系,如果非零值是正数,它就可以正常工作。
#include <stdio.h>
#include <math.h>
main()
{
float x,a,b;
a=-10.0;
b=0.0;
x=a*b;
printf("%f\n",x);
}
它是用以下方式编译的: gcc -o tt -m68020 -m68881 tt.c -lm
取出-m68881
工作正常(但当然,不使用 FPU)取出-lm
和/或math.h
没有任何区别。
有谁知道错误修复或解决方法?也许是 gcc 命令行参数?(宁愿不必做像“ if ((a<0)&&(b==0))
”这样的丑事)
顺便说一句,由于我不再有工作的 Amiga,我不得不使用模拟器。如果你想看看我在这个项目上做了什么(使用 Lattice C 版本),你可以在以下位置观看我的视频:
https://www.youtube.com/watch?v=x8O-qYQvP4M
(Amiga部分从10:07开始)
谢谢你的帮助。