通过向上(或向下)舍入将长双精度转换为双精度

时间:2014-11-25 02:50:22

标签: c++ c floating-point floating-accuracy floating-point-precision

假设我们正在开发一个类型long double的精度高于64位的平台。将给定long double转换为普通双精度数的最快方法是什么,具有一些规定的舍入(向上,向下,舍入到最近等)?

为了使问题更加准确,让我举一个具体的例子:让N成为给定的long double,将M作为double,其值最小化({1}}真实)值M - N,以便M> N。这个M将是我想要找到的向上舍入的转换。

我是否可以适当地设置FP环境的舍入模式并执行简单的转换(例如(double) N)?

澄清:您可以假设该平台支持IEEE浮点运算标准(IEEE 754)。

1 个答案:

答案 0 :(得分:3)

  

我可以适当地设置FP环境的舍入模式并执行简单的转换(例如(双倍)N)吗?

是的,只要编译器实现了IEEE 754(大多数都至少粗略地执行)。从一种浮点格式到另一种浮点格式的转换是根据IEEE 754应用舍入模式的操作之一。要从long double转换为double,请将舍入模式设置为向上并进行转换。

在C99中,C ++编译器应该接受它(我不确定是否为C ++指定了语法):

#include <fenv.h>
#pragma STDC FENV_ACCESS ON
…
fesetround(FE_UPWARD);
double d = (double) ld;

PS:您可能会发现您的编译器没有正确实现#pragma STDC FENV_ACCESS ON。欢迎来到club