当前位置: C语言 -- 标准库 -- <math.h> -- FP_CONTRACT

FP_CONTRACT编译提示


概要:
#include <math.h>
#pragma STDC FP_CONTRACT on-off-switch

描述:

浮点表达式可能会被简约,也就是说整个表达式会被作为单个操作来评估,从而忽略源代码和表达式评估方法所带来的舍入误差。简约表达式(contracted expression)的中间操作视为具有无限范围和精度,但最终结果会舍入为表达式评估方法所确定的格式。简约表达式可能会忽略浮点异常的引发。


编译提示FP_CONTRACT用于允许或者禁止简约表达式;否则表达式是否可以简约以及如何简约将由实现定义。如果该编译提示状态是ON,则允许简约表达式;如果其状态是OFF,则不允许简约表达式。

在允许简约表达式的情况下,编译器将浮点表达式简约成较少的机器码进行运算,这样可以提高执行效率;但可能会损失精度、破坏程序的可预测性。


FP_CONTRACT编译提示指令可以出现在以下两个位置:

1、外部声明之外:编译提示指令的有效期从该指令开始直至编译单元结束或者遇到另一个FP_CONTRACT编译提示指令结束。

2、复合语句中所有显式声明和语句之前:编译提示指令的有效期从该指令开始直至复合语句结束或者遇到另一个FP_CONTRACT编译提示指令(包括在嵌套的复合语句中。)结束。复合语句结束后,编译提示的状态又会恢复到复合语句之前的状态。


该编译提示的默认状态是ON还是OFF由实现决定。

on-off-switch值必须是ONOFF或者DEFAULT之一。