Fortran Coder

查看: 7170|回复: 4
打印 上一主题 下一主题

[讨论] 如何判断两个无限多态变量相等

[复制链接]

156

帖子

45

主题

1

精华

宗师

F 币
1366 元
贡献
649 点
跳转到指定楼层
楼主
发表于 2019-9-26 20:36:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 weixing1531 于 2019-9-27 10:40 编辑

这种方法好像很麻烦
[Fortran] 纯文本查看 复制代码
01program main
02  implicit none
03  write(*,*)EqualClass(1,2)
04  write(*,*)EqualClass(1,1)
05  write(*,*)EqualClass(1.0,1.001)
06  write(*,*)EqualClass(1.0,1.0)
07  write(*,*)EqualClass('abc','abcd')
08  write(*,*)EqualClass('abc','abc')
09  write(*,*)EqualClass(.true.,.false.)
10  write(*,*)EqualClass(.true.,.true.)
11contains
12pure logical function EqualClass(self, other)
13  class(*), intent(in) :: self
14  class(*), intent(in) :: other
15  EqualClass=.false. !初值为假
16 
17  select type(self)
18    type is(Integer)
19      select type(other)
20        type is(Integer)
21          EqualClass=(self==other)
22      end select
23    type is(Real)
24      select type(other)
25        type is(Real)
26          EqualClass=(abs(self-other)<1.0e-5)
27      end select
28    type is(Character(*))
29      select type(other)
30        type is(Character(*))
31          EqualClass=(self==other)
32      end select
33    type is(Logical)
34      select type(other)
35        type is(Logical)
36          EqualClass=(self.eqv.other)
37      end select
38  end select
39end function
40end program
分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

955

帖子

0

主题

0

精华

大师

F 币
188 元
贡献
77 点

规矩勋章元老勋章新人勋章水王勋章热心勋章

QQ
沙发
发表于 2019-9-27 09:15:13 | 只看该作者
我觉得不太可能吧,不同的数据类型,比较相等的操作不一样呀。
比如 logical ,非0都认为是真~~那么 0x01 和 0xFF 被认为是相等的。
还有 real 类型,要通过比较两者的差的绝对值,才有相等的意义。

132

帖子

11

主题

0

精华

大师

F 币
625 元
贡献
377 点

贡献勋章管理勋章帅哥勋章元老勋章星光勋章规矩勋章

板凳
发表于 2020-7-18 22:24:35 | 只看该作者
是很麻煩, 更麻煩得還有 KIND/RANK

桌布(wrapper)一擈就清爽了, 前人種樹後人乘涼

不考慮有效位數問題, 全對應(TRANSFER?)到 INTEGER*1 array, 一翻兩瞪眼

178

帖子

15

主题

0

精华

大宗师

F 币
4973 元
贡献
1152 点
地板
发表于 2020-7-19 03:43:39 | 只看该作者
vvt 发表于 2019-9-27 09:15
我觉得不太可能吧,不同的数据类型,比较相等的操作不一样呀。
比如 logical ,非0都认为是真~~那么 0x01  ...

哈哈,这个时候就看出OOP的好处了
所有的判断是否相等,都是在类内自我实现的,不用这么费劲再写这样的通用函数

79

帖子

17

主题

0

精华

专家

齊天大聖

F 币
433 元
贡献
266 点
5#
发表于 2020-8-3 15:07:06 | 只看该作者
liudy02 发表于 2020-7-19 03:43
哈哈,这个时候就看出OOP的好处了
所有的判断是否相等,都是在类内自我实现的,不用这么费劲再写这样的通 ...

有点东西
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2025-4-28 13:56

Powered by Discuz! X3.4

© 2013-2025 Comsenz Inc.

快速回复 返回顶部 返回列表