相关疑难解决方法(0)

浮点数学是否破碎?

请考虑以下代码:

0.1 + 0.2 == 0.3  ->  false
Run Code Online (Sandbox Code Playgroud)
0.1 + 0.2         ->  0.30000000000000004
Run Code Online (Sandbox Code Playgroud)

为什么会出现这些不准确之处?

language-agnostic math floating-point floating-accuracy

2798
推荐指数
28
解决办法
28万
查看次数

澄清什么是heisenbug

我阅读了关于heisenbug的维基页面,但是不明白这个例子.任何人都可以详细解释一下吗?

heisenbug的一个常见示例是在使用优化编译器编译程序时出现的错误,但是在没有优化的情况下编译相同程序时则不会出现错误(通常是为了使用调试器进行检查).在调试时,优化程序通常保留在寄存器中的值通常会被推送到主存储器.例如,这可能会影响浮点比较的结果,因为存储器中的值可能比寄存器中的值具有更小的范围和精度.

terminology

10
推荐指数
2
解决办法
3670
查看次数

添加/删除PRINT语句会更改变量

我有一些编写fortran代码的经验,但我从未见过这样的东西.

我正在使用大型HPC代码(~10K行),我在其中修改子程序.我使用print语句验证一切都已正确完成并在必要时进行调试.当我用PRINT我使用的最后一个语句运行我的代码时,代码到处都给我实数.一旦我评论了最后一个PRINT语句,代码就是给我NaN一些变量.由于我的代码太大,我显然不能在这里发布,但我会发表PRINT声明:

PRINT*, "outletBC up1    ", SUM(ABS(up(nptsx,:,:)))
Run Code Online (Sandbox Code Playgroud)

哪里up是一些速度阵列.

题:

怎么可能?PRINT语句如何可能影响任何变量?

5
推荐指数
1
解决办法
1128
查看次数