当前位置: 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之一。