超难问题:怎样查出系统中的浮点数比较相关src?
wugf 2009-06-15 11:23:15 手上有一个C语言的系统正在进行AIX(XLC)到Linux(gcc)的移植。在移植过程中发现原系统有以下问题:
浮点数的比较统统使用的是 fA > fB的方式,而不是 -0.0001<fA-fB<0.0001。
这样就导致相同的数据在AIX上跑出来的是 fA > fB = true, Linux上却是false。
所以,决定对这块进行修改。但是src量非常巨大,单单有比较(用>,<,=,<=,>=进行检索,所以包括整数、浮点、char等比较)的地方就有7万行,必须一个一个精查,发现是浮点比较的时候修改为正确的比较方式。而且因为是人工判断,还很容易遗漏出错。
不知道大家以前是否碰到过类似的问题,是否有什么比较便捷的方法?(修改的工作量预计不大,所以可以手工对应)
比如:
修改编译器的选项,让编译器自动对浮点数加上正确的比较方法。
有什么现成的工具可以自动检索出所有浮点相关的比较运算
如果实在不行的话,只有自己做一个词法语法分析器了