fortran - 使用 fortran PGI 编译器,为什么 real(.true.) 等于“-1.0”而 int(.true.) 等于“-1”?
问题描述
我刚刚发现了这个可爱的事实。显然这也适用于Visual Basic
......也许答案是相似的?也许它也适用于其他语言?
编辑
显然这只适用于某些编译器——在我的例子中,使用pgf90
PGI 编译器。它不适用于gfortran
.
解决方案
这 ( int(.true.)==-1
)不是真的。好吧,至少不是一般的。
首先,您不应int()
使用合乎逻辑的参数进行调用。但是您的编译器可能允许它作为扩展。
> gfortran realinttrue.f90
realinttrue.f90:1:13:
print *,real(.true.), int(.true.)
1
Error: ‘a’ argument of ‘real’ intrinsic at (1) must have a numeric type
realinttrue.f90:1:26:
print *,real(.true.), int(.true.)
1
Error: ‘a’ argument of ‘int’ intrinsic at (1) must have a numeric type
也许您的意思是:
print *, transfer(.true.,1)
end
无论如何,唯一可以保证的是有两个不同的值,TRUE 和 FALSE。它们在内存中的样子取决于编译器。有两个明显的选择。将所有位设置为 1,将第一位设置为 1。第一个是-1的整数值,另一个是+1。
例如,上面的代码确实
> ifort trueint.f90
> ./a.out
-1
> ifort trueint.f90 -standard-semantics
> ./a.out
1
> gfortran trueint.f90
> ./a.out
1
因为real
它更复杂。我不知道你是如何得到你的结果的。
推荐阅读
- javascript - 按钮值在超时时更改回原始值(表单双重提交)
- javascript - 在 React 模态中插入 ID
- python - 在对大型 csv 文件进行分块时使用多处理来加快 pandas 的加载
- javascript - jquery表单提交取消
- servicenow - API 返回链接而不是名称
- flutter - 如何重置计步器传感器并使其值在颤动中为零
- python-3.x - IndexError:索引 91770 超出轴 0 的范围,大小为 91770
- angular - 如何动态对齐 ag-grid-angular 标题
- python - 使用 Python Matplotlib 在 3D 轴上为振动传感器读数创建动画散点图
- docx - 我们可以在 jsreport 的同一个 docx 报告中有纵向和横向吗