- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
有没有办法强制 gfortran 中的下溢清零?
我不敢相信这是第一次有人问这个问题,但我在任何地方都找不到任何相关内容。如果这是重复的,我很抱歉。
最佳答案
您可以使用支持 Fortran 2003 IEEE 模块的最新版本的 gfortran 来实现此目的。该标准定义了两种下溢模式——渐进式和突然式。突发是您想要的一种,它将下溢设置为 0 并发出下溢浮点异常信号。您可以使用函数 ieee_support_underflow_control(X)
测试对控制下溢模式的支持,该函数测试实际 X 类型的下溢控制,如果支持,则返回逻辑 true。如果支持,您可以调用 ieee_set_underflow_mode(.false.)
设置突然下溢模式。
下面是一个测试程序,可用于测试默认真实类型的下溢控制支持:
program test
use, intrinsic :: ieee_arithmetic
use, intrinsic :: iso_fortran_env, only: compiler_version, compiler_options
implicit none
logical :: underflow_support, gradual, underflow
real :: fptest
integer :: i
print '(4a)', 'This file was compiled by ', &
compiler_version(), ' using the options ', &
compiler_options()
fptest = 0.0
underflow_support = ieee_support_underflow_control(fptest)
if (underflow_support) then
print *,'Underflow control supported for the default real kind'
else
stop 'no underflow control support'
end if
call ieee_set_underflow_mode(.false.)
call ieee_get_underflow_mode(gradual)
if (.not.gradual) then
print *,'Able to set abrupt underflow mode'
else
stop 'error setting underflow mode'
end if
fptest = 2e-36
do i=1,50 ! 50 iterations max
fptest = fptest * 0.5
print '(e15.10)',fptest
call ieee_get_flag(ieee_underflow,underflow)
if (underflow) print *,'Underflow exception signaling'
if (fptest == 0.0) exit
end do
end program test
使用 gfortran 版本 5.2.0,该程序输出:
This file was compiled by GCC version 5.2.0 using the options -mtune=generic -march=x86-64 -fno-unsafe-math-optimizations -frounding-math -fsignaling-nans
Underflow control supported for the default real kind
Able to set abrubpt underflow mode
.1000000036E-35
.5000000180E-36
.2500000090E-36
.1250000045E-36
.6250000225E-37
.3125000112E-37
.1562500056E-37
.0000000000E+00
Underflow exception signaling
gfortran 5.2 文档建议在使用 IEEE 模块时随时使用编译器选项标志 -fno-unsafe-math-optimizations -frounding-math -fsignaling-nans,以确保遵守标准。
关于fortran - gfortran 中的清零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32851780/
这个问题在这里已经有了答案: Mute specified sections of an audio file using ffmpeg (3 个回答) 6年前关闭。 我想使用一些命令行工具(ffmp
我想使用 STL 容器(加上 std::basic_string)在内存中临时存储 key 或密码,完成后我想将内存归零。 我最初计划使用在自定义分配器上参数化的 STL 容器,该分配器将 alloc
我正在使用Windows credentials store像这样: PCREDENTIAL cred = nullptr; if (CredRead(entryName, 1, 0, &cred)
我正在开发一个 LKM,并且在分配它之后将一个 8192 字节的 vmalloc 区域归零。我知道我可以使用 vzalloc(),但它让我感到困惑,为什么我这样做: pmem = vmalloc(81
试试nodejs几天吧。我应该在 fs.readFile() 之后以某种方式关闭文件吗?如果是的话怎么办?为了更好的性能和内存安全,我应该使用 null 还是使用一些不必要的变量? 谢谢。 最佳答案
我读过一些关于 V8 隐藏类的文章。不过,我脑子里还有几个问题: 假设有两个对象: var a = { } a.x = 5 a.y = 6 var b = { } b.y = 7 b.x = 8 他们
我想将系统范围内的标准 malloc(通过 LD_PRELOAD 或仅替换已安装的 libc)替换为一个将已释放 block 中所有可能的内容清零的 malloc。有谁知道现有的解决方案? 在堆的未使
我是一名优秀的程序员,十分优秀!