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 次 |
| 最近记录: |