Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Types 我想在Fortran中实现一个小而快速的定性数据类型_Types_Fortran - Fatal编程技术网

Types 我想在Fortran中实现一个小而快速的定性数据类型

Types 我想在Fortran中实现一个小而快速的定性数据类型,types,fortran,Types,Fortran,这是关于在Fortran中实现定性数据类型的一系列问题的一部分 背景:本主题涉及一种称为复杂系统循环分析的东西,人们可以在Puccia,C.J.和Levins,R.(1986)中读到。复杂系统的定性建模:回路分析和时间平均介绍。哈佛大学出版社,剑桥,马萨诸塞州,或莱文斯,R.(1974年)。部分指定系统的定性分析。《纽约科学院年鉴》,231:123–138。虽然我可以使用数值矩阵代数实现这项技术(正如其他地方所做的那样),但我感兴趣的是从不同的方向来处理这个问题。循环分析的本质是复杂和昂贵的(我

这是关于在Fortran中实现定性数据类型的一系列问题的一部分

背景:本主题涉及一种称为复杂系统循环分析的东西,人们可以在Puccia,C.J.和Levins,R.(1986)中读到。复杂系统的定性建模:回路分析和时间平均介绍。哈佛大学出版社,剑桥,马萨诸塞州,或莱文斯,R.(1974年)。部分指定系统的定性分析。《纽约科学院年鉴》,231:123–138。虽然我可以使用数值矩阵代数实现这项技术(正如其他地方所做的那样),但我感兴趣的是从不同的方向来处理这个问题。循环分析的本质是复杂和昂贵的(我不是CS人员,但我认为这类似于a#P难度计算),我的长期目标是为各种各样的循环分析问题创建一组库,这些问题采用基于定性算法属性的修剪优化。如果这似乎是错误的误导,请幽默我,并认为这是一个学习的锻炼。 出于我的目的,QUALIT数据类型可以有4个值:-1、0、+1和?(在文献中有时表示为-、0、+、和+/-)

我可以使用两个逻辑元素来实现这一点:

bit2  bit1  value
0      0     -1
0      1      0
1      0      1
1      1      ?
或在Fortan中:

TYPE QUALIT
  LOGICAL bit2, bit1
  END TYPE
与标准数学软件包中的符号算术不同,在质量数据上有算术运算,这将成为不同问题的主题。我的问题是:


像我在上面所做的那样,用两个逻辑变量派生一个类型是定义QUALIT数据类型的最小(内存)和最快(在处理此类数据方面)的方法吗?我想用它们做大量的算术运算(包括算术和条件测试);我还想用QUALIT类型的元素创建数组,并对这些数据执行许多操作。

这个问题的答案,以及你的另外两个问题(以及这些问题的两个部分),充其量是“视情况而定”。考虑到您编写实际问题的方式,没有详细说明的“否”可能也足够了

答案几乎肯定是硬件(假设您甚至在计算机上解决这些问题……),软件和问题细节(特别是问题大小)特定

我建议您需要构建一个测试原型,对代表性数据进行一些计算,并测量时间和内存需求。请注意,最小的解决方案可能不是最快的解决方案,而最快的解决方案可能取决于问题的大小

<>你应该考虑的变化包括使用默认类型的逻辑。默认种类逻辑的存储必须与默认种类整数和默认种类实数的存储相同,它们总是比存储真值或假值所需的标称一位存储大得多

显而易见的替代实现是将数据类型的四个值编码为一个小范围整数,甚至可能使用位内部函数。不管最终是更快还是更小。。。视情况而定

考虑到您在其他问题中希望对这些值执行的操作,以及如何使用常规逻辑操作(和/或/eqv/neqv等)表示它们,您可能还需要重新考虑从逻辑组件/位到四个值的映射。考虑表示“否定”的成分或比特,表示“肯定”的成分或比特。您可能会(也可能不会)发现,简单地使用基本逻辑运算比在其他两个问题中使用的预计算表方法给出更快的结果,特别是考虑到计算表索引所固有的逻辑运算


除了速度和内存占用之外,选择方法的另一个重要指标是结果代码的清晰性和可用性。在许多情况下,这确实是最重要的指标。

在存储问题上,这可以更强调地说是“不”。对于任何主流编译器来说,任何单一变量类型的最小存储空间都是一整字节。您可以为每个2位值使用一个
整数(种类=1)
,并使用一半的空间。(假设你的编译器支持它。)@IanH:你能用一个例子来说明“简单地使用基本的逻辑运算会比你在其他两个问题中使用的预计算表方法得到更快的结果”吗?(请在实际页面上使用适当的操作)。