相关疑难解决方法(0)

是否有文档描述Clang如何处理过多的浮点精度?

当允许使用的唯一浮点指令是387个时,几乎不可能(*)以合理的成本提供严格的IEEE 754语义.当希望保持FPU在完整的64位有效数字上工作时,这一点特别困难,因此该long double类型可用于扩展精度.通常的"解决方案"是以唯一可用的精度进行中间计算,并在或多或少明确定义的场合转换为较低的精度.

根据Joseph S. Myers在2008年GCC邮件列表中发布的解释,GCC的最新版本处理中间计算中的过多精度.gcc -std=c99 -mno-sse2 -mfpmath=387据我所知,这个描述使程序编译完全可预测,到最后一点.如果它偶然没有,那就是一个错误而且它将被修复:约瑟夫S.迈尔斯在他的帖子中声明的意图是使其可预测.

是否记录了Clang如何处理超额精度(比如何时使用该选项-mno-sse2),以及在哪里?

(*)编辑:这是夸大其词.当允许将x87 FPU配置为使用53位有效数字时,有点令人讨厌,但并不难以模拟binary64.


在下面的R ..评论之后,这里是我与Clang的最新版本之间的短暂互动的日志:

Hexa:~ $ clang -v
Apple clang version 4.1 (tags/Apple/clang-421.11.66) (based on LLVM 3.1svn)
Target: x86_64-apple-darwin12.4.0
Thread model: posix
Hexa:~ $ cat fem.c
#include <stdio.h>
#include <math.h>
#include <float.h>
#include <fenv.h>

double x;
double y = 2.0;
double z = 1.0;

int main(){
  x = y + z;
  printf("%d\n", (int) FLT_EVAL_METHOD);
}
Hexa:~ $ clang …
Run Code Online (Sandbox Code Playgroud)

c floating-point c99 clang extended-precision

53
推荐指数
2
解决办法
4528
查看次数

标签 统计

c ×1

c99 ×1

clang ×1

extended-precision ×1

floating-point ×1