用float而不是double编译c代码

han*_*nno 6 floating-point gcc

我有一个用 C 编写的冗长的数字积分方案。我想以浮点精度测试我的算法。有没有办法告诉GCC来的每次出现降级doublefloat整个程序?

Kei*_*son 7

不修改源代码就无法安全地执行此操作,但这应该不是非常困难。

使用预处理器强制将double程序中的关键字视为float一个坏主意;它会使您的程序难以阅读,并且如果您碰巧在long double任何地方使用它,它将被视为long float,这是一个语法错误。

正如stix 的回答所暗示的那样,您可以typedef在程序顶部(如果它是单个源文件)或#include由所有相关源文件编辑的某个标头中添加一个:

typedef double real; /* or pick a different name */
Run Code Online (Sandbox Code Playgroud)

然后查看您的源代码并将每次出现的更改doublereal。(小心进行盲目的全局搜索和替换。)

确保程序在此更改后仍以相同的方式编译、运行和运行。然后您可以将 typedef 更改为:

 typedef float real;
Run Code Online (Sandbox Code Playgroud)

并重新编译以使用float而不是double.

这不是简单,虽然。如果您使用在 中声明的函数<math.h>,您将希望为您使用的任何浮点类型使用正确的函数;例如,sqrt()是为doublesqrtf()是为floatsqrtl()是为long double

如果你的编译器支持的话,您可以使用<tgmath.h>头,它定义类型通用宏相当于从数学函数<math.h>。如果使用<tgmath.h>sqrt(x)则将解析为根据参数类型调用正确的平方根函数。