han*_*nno 6 floating-point gcc
我有一个用 C 编写的冗长的数字积分方案。我想以浮点精度测试我的算法。有没有办法告诉GCC来的每次出现降级double
到float
整个程序?
不修改源代码就无法安全地执行此操作,但这应该不是非常困难。
使用预处理器强制将double
程序中的关键字视为float
一个坏主意;它会使您的程序难以阅读,并且如果您碰巧在long double
任何地方使用它,它将被视为long float
,这是一个语法错误。
正如stix 的回答所暗示的那样,您可以typedef
在程序顶部(如果它是单个源文件)或#include
由所有相关源文件编辑的某个标头中添加一个:
typedef double real; /* or pick a different name */
Run Code Online (Sandbox Code Playgroud)
然后查看您的源代码并将每次出现的更改double
为real
。(小心进行盲目的全局搜索和替换。)
确保程序在此更改后仍以相同的方式编译、运行和运行。然后您可以将 typedef 更改为:
typedef float real;
Run Code Online (Sandbox Code Playgroud)
并重新编译以使用float
而不是double
.
这不是很简单,虽然。如果您使用在 中声明的函数<math.h>
,您将希望为您使用的任何浮点类型使用正确的函数;例如,sqrt()
是为double
,sqrtf()
是为float
,sqrtl()
是为long double
。
如果你的编译器支持的话,您可以使用<tgmath.h>
头,它定义类型通用宏相当于从数学函数<math.h>
。如果使用<tgmath.h>
,sqrt(x)
则将解析为根据参数类型调用正确的平方根函数。
归档时间: |
|
查看次数: |
3699 次 |
最近记录: |