Fortran Coder

查看: 47|回复: 1

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

[复制链接]

64

帖子

16

主题

1

精华

大师

F 币
640 元
贡献
388 点
发表于 2019-9-26 20:36:03 | 显示全部楼层 |阅读模式
本帖最后由 weixing1531 于 2019-9-27 10:40 编辑

这种方法好像很麻烦
[Fortran] 纯文本查看 复制代码
program main
	implicit none
	write(*,*)EqualClass(1,2)
	write(*,*)EqualClass(1,1)
	write(*,*)EqualClass(1.0,1.001)
	write(*,*)EqualClass(1.0,1.0)
	write(*,*)EqualClass('abc','abcd')
	write(*,*)EqualClass('abc','abc')
	write(*,*)EqualClass(.true.,.false.)
	write(*,*)EqualClass(.true.,.true.)
contains
pure logical function EqualClass(self, other)
	class(*), intent(in) :: self
	class(*), intent(in) :: other
	EqualClass=.false. !初值为假

	select type(self)
		type is(Integer)
			select type(other)
				type is(Integer)
					EqualClass=(self==other)
			end select
		type is(Real)
			select type(other)
				type is(Real)
					EqualClass=(abs(self-other)<1.0e-5)
			end select
		type is(Character(*))
			select type(other)
				type is(Character(*))
          EqualClass=(self==other)
			end select
		type is(Logical)
			select type(other)
				type is(Logical)
					EqualClass=(self.eqv.other)
			end select
	end select
end function
end program
回复

使用道具 举报

720

帖子

0

主题

0

精华

大师

F 币
785 元
贡献
437 点

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

QQ
发表于 2019-9-27 09:15:13 | 显示全部楼层
我觉得不太可能吧,不同的数据类型,比较相等的操作不一样呀。
比如 logical ,非0都认为是真~~那么 0x01 和 0xFF 被认为是相等的。
还有 real 类型,要通过比较两者的差的绝对值,才有相等的意义。
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

QQ|捐赠本站|Archiver|关于我们 About Us|群聊|Fcode

GMT+8, 2019-10-21 03:50

Powered by Discuz! X3.2

© 2001-2017 Comsenz Inc.

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