使用错误类型的参数调用外部 Fortran 函数时会发生什么?

2023-11-30

如果文件(而不是模块)中有一个独立函数,并且您使用单精度调用它,而它需要双精度数字:

主.f90:

program main

  call test(1.0)
end program main

测试.f90:

subroutine test(a)
    double precision :: a
    print *, "a", a
end subroutine

在这种情况下,编译器如何从单精度“转换”为双精度?使用浮点格式,我希望这些位在转换期间保持不变,但会附加额外的零。那是:

1 = 0 01111111 00000000000000000000000 in single-precision

我预计最终值为 2^(-7):

0 01111111000 0000000000000000000000000000000000000000000000000000 in double precision

令人惊讶的是,对于 gfortran 6.4.0,最终值为 5.2635442471208903E-315。


编译器不进行强制转换。你写的不是Fortran。

主程序中的子程序test有一个隐式接口。本质上,编译器对此一无所知,除了它是一个子例程。您还告诉它它有一个(默认)实参。

在引用子例程时提供正确的参数类型和种类是您的责任,而不是编译器的责任。你失败了,所以你没有兼容的 Fortran 程序。 Fortran 编译器不欠你任何东西。

What you will observe will depend on implementation details of the Fortran processor. The subroutine expects a double precision argument and has no reason to believe it has anything else. Whether there is copy-in/copy-out or some address passing1, the interpretation of memory will not match. In the dummy argument, all but the bytes corresponding to the default real of the actual argument are "junk".

如果您为主程序中的子例程提供显式接口,仍然不会进行强制转换,但编译器会注意到不匹配。同样,即使存在隐式接口,某些编译器(可能具有某些编译标志)也会进行一些检查。


1 For details of the likely pass-by-reference, see the comment by user5713492.

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

使用错误类型的参数调用外部 Fortran 函数时会发生什么? 的相关文章

  • Python 丰富比较的行为(或者,当 Decimal('100.0') < .01 时)

    所以我有一个班轮 import decimal h decimal Decimal 100 0 h gt 01 h lt 01 h gt 01 h lt 01 它所做的只是创建一个包含 100 0 的 Decimal 对象 并以各种方式将其
  • 如何将mortran代码转换为fortran代码

    我有一些 Mortran 代码 来自 glmnet 我想阅读和编译 我知道在编译时 Mortran首先转换为Fortran 然后编译 如果有预处理器的话 如何安装 Mortran 预处理器 特别是 OS X 上的 Mortran3 我在以下
  • 指定 gfortran 应该在其中查找模块的目录

    我目前基于模块来编译程序 例如主程序foo这取决于模块bar 如下 gfortran c bar f90 gfortran o foo exe foo f90 bar o 当foo f90 and bar f90位于同一目录中 如何指定 g
  • 从 str 转换为 float 时保持尾随 0

    将带有尾随零的数字从字符串转换为浮点数时遇到以下问题 a 1 100 string a str a float a float string a float a 1 1 有没有办法将 str 转换为 float 同时保留末尾的尾随 0 首先
  • 如何在 Swift 中解析蓝牙设备发送的浮点数?

    在我的 iOS 应用程序上 我需要解码蓝牙接收到的 Float 值 并从不同的设备 不是 iOS 获取 4 个字节 因此我需要一个 便携式 4 字节 Float 格式 目前发件人正在使用以下格式 数据编码 0xCCBBAAAEE 0xEE
  • 在一条语句中对多个变量进行相同的赋值

    有没有一种方法可以为不同的变量分配相同的值 而无需在单个语句中构造数组 例如 如果我有变量a b c d and e 我可以分配类似的东西吗 a b c d e 10 0 我知道我可以用一行来做 a 10 0 b 10 0 c 10 0 d
  • 如何安全地将 CGFloat 降低或提高到 int?

    我经常需要在地板或天花板上安装CGFloat to an int 用于计算数组索引 我永远看到的问题floorf theCGFloat or ceilf theCGFloat 是浮点不准确可能会带来麻烦 那如果我的CGFloat is 2
  • 使用按位 OR 0 对数字进行取整

    我的一位同事偶然发现了一种使用按位或来对浮点数进行底数的方法 var a 13 6 0 a 13 我们正在谈论它并想知道一些事情 它是如何工作的 我们的理论是 使用这样的运算符将数字转换为整数 从而删除小数部分 与这样做相比 它有什么优势吗
  • 使用浮点/双除法比较可约分数

    假设我有两个分数 a b 和 c d 其中 a b c d 都是大于 0 的整数 使用以下函数检查它们的相等性是否安全 bool are equal fractions int a int b int c int d return stat
  • C++ 中的双精度型数字

    尽管内部表示有 17 位 但 IEE754 64 位 浮点应该正确表示 15 位有效数字 有没有办法强制第 16 位和第 17 位为零 Ref http msdn microsoft com en us library system dou
  • 使用 MacLaurin 展开的 Fortran Sine 函数的微小差异

    我正在用 Fortran 创建一个程序 它接受以弧度表示的 sin x 的 x 然后是要计算的项数 这是我的程序 Sine value using MacLaurin series program SineApprox implicit n
  • gfortran 支持尾调用消除吗?

    我编写了这个小程序来测试 gfortran 是否执行尾调用消除 program tailrec implicit none print tailrecsum 5 0 contains recursive function tailrecsu
  • C 中使用 getrandom 实现随机浮点数

    我试图生成一个介于 0 和 1 之间的随机浮点数 无论是在 0 1 还是 0 1 对我来说都不重要 网上关于此的每个问题似乎都涉及rand 呼叫 播种time NULL 但我希望能够每秒多次调用我的程序 并每次都获得不同的随机数 这引导我找
  • 浮点字节序?

    我正在为实时海上模拟器编写客户端和服务器 并且由于我必须通过套接字发送大量数据 因此我使用二进制数据来最大化可以发送的数据量 我已经了解整数字节顺序以及如何使用htonl and ntohl为了规避字节顺序问题 但我的应用程序与几乎所有模拟
  • Fortran gfortran linux 中的“分段错误(核心转储)”错误

    我正在创建一个程序 该程序将分析目录中的文件 fits 然后它将在另一个目录中创建另一个文件 txt 它只是一个转换器 当我尝试执行该程序 编译正常 时 它给了我一条错误消息 程序收到信号 SIGSEGV 分段错误 无效的内存引用 此错误的
  • MySQL 存储浮点数

    我正在尝试保存这么长的浮点数 13 00386644742523 它基本上是 Lat 和 Lng 值 当我将它保存在数据库中时 它被存储为 13 0039 您应该明确使用精度并且类型应该是DECIMAL NOT FLOAT因为小数点后的每一
  • Fortran 中的共享库,最小示例不起作用

    我试图了解如何在 Linux 下的 Fortran 中动态创建和链接共享库 我有两个文件 第一个 liblol f90 看起来像这样 subroutine func print lol end subroutine func 我用它编译gf
  • 标准数学函数在不同 CPU 上的再现性

    我正在做一个需要大量数学计算的项目 打开新的测试机后 我注意到很多测试都失败了 但同样重要的是要注意 测试在我的开发机器以及其他开发人员的某些机器上也失败了 经过跟踪值并与旧机器的值进行比较后 我发现一些功能 此时我只发现cosine ma
  • 为什么某些 float < integer 比较比其他比较慢四倍?

    将浮点数与整数进行比较时 某些值对的计算时间比类似大小的其他值要长得多 例如 gt gt gt import timeit gt gt gt timeit timeit 562949953420000 7 lt 56294995342100
  • MPI_Type_Create_Hindexed_Block 生成派生数据类型的错误范围

    使用Fortran 我尝试为动态分配的结构构建派生数据类型 但它得到了新类型的错误范围 代码如下 PROGRAM MAIN IMPLICIT NONE INCLUDE mpif h INTEGER I INTEGER MYID NUMPRO

随机推荐

  • cookie / MAMP / CodeIgniter 的问题

    我在使用 MAMP 和 Codeigniter 读取本地主机上的 cookie 时遇到问题 我正在尝试使用 cookie 来验证对管理区域的访问 我可以设置 cookie 我在浏览器上看到它 Chrome 但在授予访问权限后我无法读取它 我
  • 接受 Java 中的证书

    我在通过 Java 与 HTTPS 站点交互时遇到问题 我的程序每次运行时都会使用一个带有不受信任证书的 URL 该程序必须在多个系统上运行 目前 我有以下内容 public class A HostnameVerifier hv new
  • Google 日历 API - 未从 Execute() C# 返回

    运行下面的代码永远不会从执行函数返回 我的个人 Gmail 帐户上有一个私人日历 已与developer gserviceaccount com 帐户共享 查看 API 管理器 用法 引用显示我已经使用过甚至点击了该 API 任何想法表示赞
  • 将非结构化 csv 文件转换为数据框

    我正在学习 R 用于文本挖掘 我有一个 CSV 格式的电视节目表 节目通常从早上 06 00 开始 一直持续到第二天凌晨 05 00 称为播出日 例如 2015 年 11 月 15 日的节目从早上 06 00 开始 到次日凌晨 05 00
  • 在Java中,如何测试对象的监视器是否被锁定? [复制]

    这个问题在这里已经有答案了 在Java中 如何测试对象的监视器是否被锁定 换句话说 给定一个对象 obj 是否有任何线程拥有 obj 的监视器 我不关心哪个线程拥有监视器 我需要测试的是是否有任何线程拥有给定对象的监视器 由于当前线程以外的
  • 如何在 React 中将多个浏览器特定值添加到 CSS 样式中?

    这主要是为了给定的 CSS 属性定义浏览器特定值 如下所示 div Grab me div 如果我将它包装成这样的对象 div Grab me div 然后您复制对象中的键 在严格模式下会失败 否则会覆盖 并且简单地将所有值放入单个字符串中
  • 应用配色方案

    我正在为现有应用程序开发一个新的 UI 目前使用 VB6 并且被告知要使其看起来更好 更漂亮 有没有什么地方可以让我获得一些关于商业应用程序的配色方案 非 25 度灰度 的好主意 仅供参考 我在 WPF 工作 检查这个应用 用于拍摄配色方案
  • 将 json 反序列化为键值对列表

    我有以下 json key key1 value val1 key key2 value val2 我如何将其反序列化为列表 数组NameValuePair
  • 更新 sqlite 中的查询

    活动代码 String MMS SELECT Name FROM UserData WHERE MessagesSent SELECT max MessagesSent FROM UserData db execSQL UPDATE Mai
  • 关于 MPI_Scatter 执行器及其发送缓冲区分配的问题

    我的第一个想法是MPI Scatter和发送缓冲区分配应该用于if proc id 0 子句 因为数据应该只分散一次 并且每个进程只需要发送缓冲区中的一部分数据 但是它无法正常工作 看来发送缓冲区分配和MPI Scatter在应用程序正常运
  • 从 php 中的 url 获取 #

    我正在尝试使用 facebook API 进行编码 这里说 http developers facebook com docs authentication javascript获取 access token 的东西 但它是在 而不是 之后
  • 如何将数据帧转换为标签特征向量?

    我正在 scala 中运行逻辑回归模型 并且有一个如下所示的数据框 df x y 0 0 0 33 0 58 0 96 0 1 1 21 0 10 0 65 1
  • Intel 和 AMD 如何不同但仍然兼容?

    正如我一直以来的理解 AMD 通过逆向工程英特尔的指令集来构建他们的 CPU 现在向英特尔付费以使用他们的指令集 而英特尔对 AMD 的 64 位指令也做了同样的事情 这就是 Windows 可以在两种类型的 CPU 上安装而无需购买特定版
  • Perl 中哈希键的字符串比较

    我在 Perl 中有一个哈希映射 如下所示 MAP MESSAGE TO NUMBER gt Hello World I am XYZ gt 11 I am using Stack Overflow for Guidance gt 12 P
  • 以编程方式检测 iPad/iPhone 硬件的最佳方法

    我需要找出的原因是 在 iPad 上 UIPickerView 在横向和纵向上具有相同的高度 在 iPhone 上情况有所不同 iPad 编程指南向 UIDevice 引入了一个 idiom 值 UIDevice thisDevice UI
  • mvc 中 AJAX 上传脚本的问题

    我在这里找到了这个ajax文件上传脚本http www phpletter com Demo AjaxFileUpload Demo 应该将 ajax 功能添加到我的文件上传表单中 div title Upload Image Select
  • 根据 Google 表格中的单元格值将行复制到另一张表格

    我正在尝试 FILTER Orginal A D Orginal D D Complete Screens 我有错误 公式分析错误 我做错了什么 您在这里遇到语法错误 请使用以下公式 FILTER Orginal A2 D Orginal
  • Access-Control-Allow-Origin 未显示在 codeigniter 的响应标头中

    我的 Codeigniter 文件说 CI gt output gt set header Access Control Allow Origin CI gt output gt set header Access Control Expo
  • 如何理解在某些情况下允许实现将非局部变量的动态初始化视为静态初始化?

    其实问题出自标准草案N4582中的一句话 basic start static 3 允许实现将具有静态或线程存储持续时间的变量初始化作为静态初始化 即使不需要静态完成此类初始化 前提是 初始化的动态版本不会更改初始化之前任何其他静态或线程存
  • 使用错误类型的参数调用外部 Fortran 函数时会发生什么?

    如果文件 而不是模块 中有一个独立函数 并且您使用单精度调用它 而它需要双精度数字 主 f90 program main call test 1 0 end program main 测试 f90 subroutine test a dou