gfortran 中的清零

2024-03-01

有没有办法强制 gfortran 中的下溢清零?

我不敢相信这是第一次有人问这个问题,但我在任何地方都找不到任何相关内容。如果这是重复的,我会承担责任。


您可以使用支持 Fortran 2003 IEEE 模块的最新版本的 gfortran 来实现此目的。该标准定义了两种下溢模式——渐进式和突然式。突发是您想要的一种,它将下溢设置为 0 并发出下溢浮点异常信号。您可以使用以下函数测试对控制下溢模式的支持ieee_support_underflow_control(X)它测试真实 X 类型的下溢控制,如果支持,则返回逻辑 true。如果支持的话,您可以call 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

编译器选项标志-fno-unsafe-math-optimizations -frounding-math -fsignaling-nansgfortran 5.2 文档建议在使用 IEEE 模块时使用,以确保遵守标准。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

gfortran 中的清零 的相关文章

  • 使用 ctypes 从 Python 调用 fortran 函数

    我希望使用 ctypes 来调用一些旧的 Fortran 库 这些库是我老板几年前编写的 我按照中给出的例子进行操作上一个问题 https stackoverflow com questions 5811949 call functions
  • 与 gfortran 和 gcc 静态链接的混合语言

    我有一些用 C 和 Fortran 编写的代码 我想将其编译成静态链接的可执行文件 如果我动态编译代码 使用 fno underscoringgfortran 的选项 一切正常 但是 我想将其链接到 so文件中 静态链接大部分需要的库 然后
  • 将标量和数组(任意维度)从 Fortran 传递到 C

    我有以下名为的 Fortran 子例程show value调用一个名为的 C 函数show value INTERFACE SUBROUTINE show value variable BIND C name show value USE
  • 现代 Fortran:无标签的输出格式

    我正在寻找一种不使用标签来指定输出格式的方法 为了理解我的意思 用标签 write 1001 icount x y 1001 format i5 f5 2 e12 3 没有标签应该是我放的format i5 f5 2 e12 3 在 wri
  • Intel Fortran 错误 #6633:实际参数的类型与虚拟参数的类型不同

    对于可能在这里提出这样一个基本问题 我深表歉意 我是使用英特尔 Fortran 编程的新手 所以我认为在这种情况下 我不知道有一些东西丢失或组织错误 如果有人能在这方面帮助我 我将不胜感激 问题是我在编译代码时看到以下错误 而我相信我已经声
  • f77 未格式化二进制文件的内容

    我有一个 f77 未格式化的二进制文件 我知道该文件包含 2 个浮点数和一个长整数以及数据 文件的大小为 536870940 字节 应包含 512 3 个浮点数据值以及 2 个浮点和长整数 512 3 个浮点数据值组成 536870912
  • 使用 MPI 派生数据类型

    我正在学习 Fortran 中的 BCASTing 数据类型 并且有一个代码可以从终端获取两个值并将它们显示在每个进程上 对于整数 整数和整数 实数类型的组合 value1 value2 这是有效的 但是对于整数 实数 8 的组合 它会失败
  • fortran 77 到 fortran 90 的转换器软件 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我有 fortran 77 编码 但我想转换为 fortran 90 在哪里可以下载转换器软件 这是我帮
  • SELECT TYPE 构造中的多态性分配

    我试图定义一个分配不同类型数组的子例程 这是代码的简化版本 subroutine Allocation1 Vec class allocatable intent out Vec select type Vec type is real 8
  • 如何为 Fortran 95+ 模块库提供显式接口,并隐藏实现

    我正在使用 gfortran 的 95 扩展 我有一个实用程序模块库 我想链接到其他项目 即作为库或共享对象 dll 但是 在 Fortran 中 我不明白如何在不维护模块接口的两个副本的情况下将接口与 Fortran 中的实现分离 在 C
  • 将派生类型中的指针分配给 Fortran 中相同类型中的目标

    我想在包含在同一派生类型中的派生类型中分配一个指针 下面的代码给了我下面的错误 这是怎么回事 我该如何解决这个问题 24 zoos i tigers 1 gt zoos i animals 1 1 1 Error Expected boun
  • 提高由整数商定义的变量的精度

    假设我有以下程序 program derp implicit none integer parameter ikind selected real kind 18 real kind ikind a 2 0 3 0 print a end
  • 将数据写入列中的文件 (Fortran)

    我需要在 Fortran 90 中写入一些数据到文件中 我应该如何使用WRITE input将值分组为columns WRITE总是放一个new line每次通话后 这就是问题所在 代码示例 open unit 4 file generat
  • 使用 Fortran (CLFORTRAN) 在 OpenCL 中将两个选项作为参数传递

    当我的主机程序采用 C 语言时 我可以传递两个选项作为 OpenCL 函数的参数 例如 我可以通过两个 标志到clCreateBuffer像这样的函数 clCreateBuffer context CL MEM READ ONLY CL M
  • OpenMP 因大型数组而崩溃

    我正在使用 Fortran 和 OpenMP 但当我尝试在存在大型数组时使用 OpenMP 并行化循环时 我不断遇到问题 例如 以下代码 PROGRAM main IMPLICIT NONE INTEGER PARAMETER NUMLOO
  • Dependency Walker 未显示所有依赖的 Dll

    我有一个 fortran dll 我想知道它所依赖的程序集再分配目的 http software intel com en us forums showthread php t 73161 我发现的一件事是依赖项步行器没有显示所有依赖项 即
  • 从 Fortran 字符串中提取单个字符

    我需要一个程序将基数 a 转换为基数 b 其中基数 a 和 b 可以是从 2 到 36 我的想法是使用字符串作为数字 作为中介转换为基数 10 然后从基数 10 转换为基数 b 由于我是 Fortran 新手 我不太理解函数和子字符串 现在
  • Fortran if stop 需要 endif 吗?

    在 fortran 90 中 if stop 语句是否需要结束 endif example if foo eq 1 stop do some stuff do some stuff 是循环的一部分还是 stop 意味着程序结束时 endif
  • 关于for循环中的fortran continue语句的问题

    我正在分析 Fortran 代码并有一个简单的问题 我想知道下面代码中 100 和 200 处的 继续 语句的作用 它会增加 i 和 j 计数器吗 如果是这样的话 不会if not flg 那么条件包含flg循环中 flg 的 最后一个值
  • 如何将mortran代码转换为fortran代码

    我有一些 Mortran 代码 来自 glmnet 我想阅读和编译 我知道在编译时 Mortran首先转换为Fortran 然后编译 如果有预处理器的话 如何安装 Mortran 预处理器 特别是 OS X 上的 Mortran3 我在以下

随机推荐

  • 在 for 循环中未设置的批处理脚本变量无效

    下面是我的脚本 我试图查看下面一层的文件夹并仅挑选出这些文件夹 因此 9 从路径中提取最后 9 个字符 但 set var 不会取消设置变量 因为输出返回时 相同的文件夹名称重复 次 另外 批处理不允许我直接在 i 上执行此提取技巧 因此需
  • 存根和mockito中的区别

    我是mockito新手 需要知道存根和何时之间的区别 1 stub cpproxy getBinList toReturn gettestbins 2 when cpproxy getBinList thenReturn gettestbi
  • Delphi - TDictionary 线程安全吗

    我的想法是使用 TDictionary 来管理 IdTCPServer 上的客户端连接 这是一个用于理解目的的简单示例代码 未经测试 var Dic TDictionary
  • 如何使用 FFMPEG 最好地转换 Flash 兼容的 mp4 文件?

    我正在尝试将不同的文件转换为闪存兼容的文件 mp4使用 ffmpeg 文件 但我似乎无法让它工作 当然 目标是以最小的文件大小获得最好的质量 到目前为止 我已经有了这个 它可以工作 但由于某种原因它不能在 Flash 播放器中播放 结果不太
  • hdf5 和 ndarray 附加/大型数据集的省时方法

    背景 我有一个 k n 维时间序列 每个序列表示为 m x n 1 数组 其中包含浮点值 n 列加上代表日期的一列 Example k 大约 400 万 个时间序列 看起来像 20100101 0 12 0 34 0 45 20100105
  • 预期为 &-ptr,在迭代元组数组时找到元组

    我有一个数组 const adjacent i8 i8 8 1 1 1 0 1 1 1 0 1 0 1 1 1 0 1 1 该数组代表一个单元格内的所有相邻单元格ROWxCOLUMN网格 为了迭代这个数组以找到所有邻居 我这样做 for k
  • Android Studio logcat 历史记录/缓冲区大小

    有谁知道是否有办法增加 Android Studio 中 logcat 历史记录 缓冲区的大小 我记得在 Eclipse 中有一种方法可以做到这一点 并希望 Android Studio 有类似的设置 您还可以通过 IDE 按项目执行此操作
  • O(1) 时间内的链表串联

    我遇到了一个有趣的问题 我对提供给我的答案感到困惑 问题如下 The concatenation of 2 lists can be performed O 1 time Which of the following implementat
  • 我应该选择指针还是引用作为数据成员?

    这是一个简单的例子来说明这个问题 class A class B B A a a a A a class C C b a A a B b So B负责更新一部分C 我通过 lint 运行了代码 它抱怨引用成员 皮棉 1725 http gi
  • 此 font: 速记属性语法有效吗? (我对规范的阅读表明是的,但我安装的浏览器中有一半不同意。)

    这是有效的吗 font bold 10px 13px inherit 根据我读到的specs http www w3 org TR CSS2 fonts html font shorthand这应该意味着 粗体 的字体粗细 继承 的字体系列
  • 如何使用zxing条码读取应用程序实现缩放功能?

    我正在使用 zxing 条形码读取应用程序 我需要在应用程序中添加缩放功能 以便我可以从更远的距离扫描条形码 即在扫描条形码时 应该能够缩放相机预览 我怎样才能做到这一点 Thanks 变焦并没有多大帮助 因为它是数码变焦 事实上 它往往会
  • 如何增加顶点数?

    我需要一个参数化形式matplotlib path Path 所以我用了 vertices属性 它工作得很好 只是给出的点数对于我想要的用途来说太低了 这是一段代码来说明 import numpy as np from matplotlib
  • java库从文件内容查找mime类型[重复]

    这个问题在这里已经有答案了 我正在寻找一个java库 它通过查看文件内容 字节数组 来告诉你mime类型 我发现这个项目使用 jmimemagic 它不再支持较新的文件类型 例如 MS word docx 格式 因为它现在处于非活动状态 从
  • 如何在 Visual Studio 2008 中使用 Visual Studio 2010 C++ 工具?

    如果可能的话 有人知道如何在 Visual Studio 2008 中使用 Visual Studio 2010 附带的完整 c 工具集 编译器 链接器 sdk 吗 更改 选项 gt 项目和解决方案 gt VC 目录 下监听的所有目录就足够
  • 从 Django 的 RawQuerySet 获取数据库游标

    我在 Postgres 中有一个相当大的表 20M 我尝试对其进行原始 Django 查询 tweets TweetX objects raw SELECT from twitter tweet using twittertest 我很快就
  • 仅终止 SQL Server 中的用户进程

    有些用户忘记关闭使用我们的 SQL 2014 数据库的访问查询 当发生这种情况时 它会阻止他们正在访问的表在夜间重建 有什么方法可以杀死这些用户而不杀死系统进程 据我所知 系统进程不仅限于 SPID gt 50 根据杀死用户进程spid g
  • Javascript正则表达式仅适用于整数,不以0开头但允许0

    我需要一个正则表达式来验证整数 05 and 00是不允许的 但是0被允许 目前我有这个 1 9 d 但它不允许0 感谢帮助 1 9 d 0 这就是你的模式
  • 在 Android 中将 XML 转换为 JSON 对象

    我有一个 XML 字符串 如下所示
  • jquery .not() 不工作

    我试图在每个实例上发生一些事情 除了有禁用类的地方 但 not 似乎不起作用 这是我所拥有的内容的简短版本 if this not Disabled Do Something 但是 如果我反转它 即 if this is Disabled
  • gfortran 中的清零

    有没有办法强制 gfortran 中的下溢清零 我不敢相信这是第一次有人问这个问题 但我在任何地方都找不到任何相关内容 如果这是重复的 我会承担责任 您可以使用支持 Fortran 2003 IEEE 模块的最新版本的 gfortran 来