【问题标题】:fegetenv() clears exception mask on x86_64-linuxfegetenv() 清除 x86_64-linux 上的异​​常掩码
【发布时间】:2013-12-05 04:36:21
【问题描述】:

让我们来看看下面的程序:

#include <stdio.h>
#include <fenv.h>

int main (void)
{
  fenv_t e;

  printf ("%d\n", fegetexcept () & FE_INVALID ? 1 : 0);
  feenableexcept (FE_INVALID);
  printf ("%d\n", fegetexcept () & FE_INVALID ? 1 : 0);
  fegetenv (&e);
  printf ("%d\n", fegetexcept () & FE_INVALID ? 1 : 0);
  fesetenv (&e);
  printf ("%d\n", fegetexcept () & FE_INVALID ? 1 : 0);
}

我希望它输出“0 1 1 1”:即,一旦我启用了FE_INVALID 异常,在相同环境下对fegetenvfesetenv 的调用不应修改它。

这在 i386-linux 上按预期工作,但在 x86_64-linux(在 64 位模式下)上,我得到“0 1 0 1”。也就是说,调用fegetenv 会清除异常掩码

我看不到任何记录它的地方,甚至没有看到 C99 下允许的行为。我可以在glibc-2.5和glib-2.13下确认。

有人可以在最近的 glibc 上测试它吗? 我认为这是一个错误是否正确?

【问题讨论】:

    标签: floating-point c99 glibc floating-point-exceptions fenv


    【解决方案1】:

    好吧,我在 glibc 错误数据库中有 filed a bug,这已得到一位开发人员的确认。我想这足以证明 它确实是 glibc 中的一个错误

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-05-05
      • 1970-01-01
      • 1970-01-01
      • 2011-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多