<?xml version="1.0" encoding="UTF-8"?>
<TEI xml:space="preserve" xmlns="http://www.tei-c.org/ns/1.0" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://www.tei-c.org/ns/1.0 https://raw.githubusercontent.com/kermitt2/grobid/master/grobid-home/schemas/xsd/Grobid.xsd"
 xmlns:xlink="http://www.w3.org/1999/xlink">
	<teiHeader xml:lang="en">
		<fileDesc>
			<titleStmt>
				<title level="a" type="main">F-IKOS: An Abstract Interpretation-based Static Analyzer for Fortran Programs</title>
			</titleStmt>
			<publicationStmt>
				<publisher/>
				<availability status="unknown"><licence/></availability>
			</publicationStmt>
			<sourceDesc>
				<biblStruct>
					<analytic>
						<author>
							<persName><forename type="first">Sheng</forename><surname>Zou</surname></persName>
							<email>zous@nudt.edu.cn</email>
							<affiliation key="aff0">
								<orgName type="department">College of Computer Science and Technology</orgName>
								<orgName type="institution">National University of Defense Technology</orgName>
								<address>
									<postCode>410073</postCode>
									<settlement>Changsha</settlement>
									<country key="CN">China</country>
								</address>
							</affiliation>
							<affiliation key="aff1">
								<orgName type="department">State Key Laboratory of Complex &amp; Critical Software Environment</orgName>
								<address>
									<postCode>410073</postCode>
									<settlement>Changsha</settlement>
									<country key="CN">China</country>
								</address>
							</affiliation>
						</author>
						<author>
							<persName><forename type="first">Liqian</forename><surname>Chen</surname></persName>
							<email>lqchen@nudt.edu.cn</email>
							<affiliation key="aff0">
								<orgName type="department">College of Computer Science and Technology</orgName>
								<orgName type="institution">National University of Defense Technology</orgName>
								<address>
									<postCode>410073</postCode>
									<settlement>Changsha</settlement>
									<country key="CN">China</country>
								</address>
							</affiliation>
							<affiliation key="aff1">
								<orgName type="department">State Key Laboratory of Complex &amp; Critical Software Environment</orgName>
								<address>
									<postCode>410073</postCode>
									<settlement>Changsha</settlement>
									<country key="CN">China</country>
								</address>
							</affiliation>
						</author>
						<author>
							<persName><forename type="first">Guangsheng</forename><surname>Fan</surname></persName>
							<email>guangshengfan@nudt.edu.cn</email>
							<affiliation key="aff0">
								<orgName type="department">College of Computer Science and Technology</orgName>
								<orgName type="institution">National University of Defense Technology</orgName>
								<address>
									<postCode>410073</postCode>
									<settlement>Changsha</settlement>
									<country key="CN">China</country>
								</address>
							</affiliation>
							<affiliation key="aff1">
								<orgName type="department">State Key Laboratory of Complex &amp; Critical Software Environment</orgName>
								<address>
									<postCode>410073</postCode>
									<settlement>Changsha</settlement>
									<country key="CN">China</country>
								</address>
							</affiliation>
						</author>
						<author>
							<persName><forename type="first">Renjie</forename><surname>Huang</surname></persName>
							<email>renjiehuang@nudt.edu.cn</email>
							<affiliation key="aff0">
								<orgName type="department">College of Computer Science and Technology</orgName>
								<orgName type="institution">National University of Defense Technology</orgName>
								<address>
									<postCode>410073</postCode>
									<settlement>Changsha</settlement>
									<country key="CN">China</country>
								</address>
							</affiliation>
							<affiliation key="aff1">
								<orgName type="department">State Key Laboratory of Complex &amp; Critical Software Environment</orgName>
								<address>
									<postCode>410073</postCode>
									<settlement>Changsha</settlement>
									<country key="CN">China</country>
								</address>
							</affiliation>
						</author>
						<author>
							<persName><forename type="first">Banghu</forename><surname>Yin</surname></persName>
							<email>bhyin@nudt.edu.cn</email>
							<affiliation key="aff2">
								<orgName type="department">College of Systems Engineering</orgName>
								<orgName type="institution">National University of Defense Technology</orgName>
								<address>
									<postCode>410073</postCode>
									<settlement>Changsha</settlement>
									<country key="CN">China</country>
								</address>
							</affiliation>
						</author>
						<title level="a" type="main">F-IKOS: An Abstract Interpretation-based Static Analyzer for Fortran Programs</title>
					</analytic>
					<monogr>
						<idno type="ISSN">1613-0073</idno>
					</monogr>
					<idno type="MD5">4B3892621A0114BFAABC68A1B4C91E7C</idno>
				</biblStruct>
			</sourceDesc>
		</fileDesc>
		<encodingDesc>
			<appInfo>
				<application version="0.7.2" ident="GROBID" when="2025-04-23T17:15+0000">
					<desc>GROBID - A machine learning software for extracting information from scholarly documents</desc>
					<ref target="https://github.com/kermitt2/grobid"/>
				</application>
			</appInfo>
		</encodingDesc>
		<profileDesc>
			<textClass>
				<keywords>
					<term>Fortran</term>
					<term>Static Analysis</term>
					<term>Abstract Interpretation</term>
					<term>Floating-point Program Analysis</term>
				</keywords>
			</textClass>
			<abstract>
<div xmlns="http://www.tei-c.org/ns/1.0"><p>The Fortran programming language is widely utilized in numerical computation and scientific computing. Fortran programs are prone to potential runtime errors related to numerical properties due to the large number of numerical operations. In this paper, we present F-IKOS, an abstract interpretation-based static analyzer for Fortran programs on top of IKOS, which soundly handles floating-point types in Fortran programs. Firstly, we translate Fortran programs to LLVM IR using compiler front-end Flang. After that, we extend IKOS to support sound floating-point analysis and then employ it to analyze the translated LLVM IR. Particularly, when analyzing floating-point types in programs, we first abstract floating-point expressions into real-number expressions with interval coefficients, and then linearize these expressions into real-number expressions with scalar coefficients. These linear expressions are subsequently handled by abstract domains originally designed for real-number types to produce sound analysis results. We have conducted experiments on representative Fortran programs to show the efficiency and effectiveness of F-IKOS. The experimental results are encouraging: F-IKOS soundly analyzes runtime errors in complex programs, outperforming other analyzers.</p></div>
			</abstract>
		</profileDesc>
	</teiHeader>
	<text xml:lang="en">
		<body>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="1.">Introduction</head><p>The Fortran programming language is one of the oldest high-level programming languages and one of the first to be widely adopted for scientific computing. Additionally, several numerical computation libraries, including BLAS <ref type="bibr" target="#b16">[17]</ref>, which are developed in Fortran, have significantly contributed to the widespread use of Fortran in domains such as numerical computing and high-performance computing. Compared with mainstream high-level programming languages such as C++ and Java, Fortran possesses a distinctive set of features, such as powerful array manipulation and abundant intrinsic functions for numerical computation.</p><p>However, Fortran programs are prone to potential runtime errors related to numerical aspects such as divisionby-zero and arithmetic overflow due to the large number of numerical operations. Researchers have dedicated efforts to the analysis and verification of Fortran programs. Previous research on the analysis of Fortran programs can be mainly classified into three categories: Firstly, approaches such as f2c <ref type="bibr" target="#b2">[3]</ref> and FABLE <ref type="bibr" target="#b10">[11]</ref> convert Fortran programs to other high-level language programs and verify them using verifiers over the converted high-level language programs. Secondly, approaches such as SMACK <ref type="bibr" target="#b6">[7]</ref> and CIVL <ref type="bibr" target="#b7">[8]</ref> translate Fortran programs to Intermediate Representation (IR), which is then verified using verifiers for IR, mainly based on model checking. Additionally, some static analyzers such as FORTRAN-lint <ref type="bibr" target="#b12">[13]</ref>, ftnchek <ref type="bibr" target="#b11">[12]</ref> and Coverity <ref type="bibr" target="#b13">[14]</ref> detect certain generic defects, such as dead code and variable usage problems, using pre-defined patterns.</p><p>Fortran programs are characterized by the extensive use of floating-point operations, which are crucial for achieving high precision and scale in numerical computing tasks, such as solving differential equations. Every floating-point type has a specific finite precision and cannot represent all real numbers exactly, leading to inherent and pervasive rounding errors in Fortran programs. If rounding errors are not accounted for during the analysis of Fortran programs, the analysis results may be unsound. However, the aforementioned approaches neglect to account for rounding errors during the analysis of Fortran programs.</p><p>In this paper, we propose an approach to abstract floatingpoint operations soundly in Fortran programs, which considers rounding errors when analyzing programs. Our approach abstracts floating-point expressions in programs into expressions with interval coefficients under real-number semantics and then linearizes them into expressions with scalar coefficients. This abstraction aims to eliminate rounding errors by floating-point operations during program analysis, which enables analyzers to perform sound analysis under the abstract interpretation framework. We develop a Fortran program analyzer on top of the Inference Kernel for Open Static Analyzers (IKOS <ref type="bibr" target="#b9">[10]</ref>) to implement the proposed approach, named F-IKOS. F-IKOS utilizes Flang <ref type="bibr" target="#b4">[5]</ref> to translate Fortran programs into LLVM Intermediate Representation (LLVM IR) and then leverages IKOS to analyze the LLVM IR. The core of F-IKOS is IKOS, which is a static analyzer based on abstract interpretation. IKOS can use abstract domains from the Apron <ref type="bibr" target="#b5">[6]</ref> numerical abstract domain library to analyze programs. However, it mainly detects runtime errors in machine integer types and cannot infer invariants on floating-point types <ref type="bibr" target="#b0">[1]</ref>. In our implementation, we first extended IKOS to support floating-point types, and then applied the proposed approach to handle floating-point operations soundly. With these extensions, F-IKOS can analyze floating-point types in Fortran programs and obtain sound analysis results. We conducted experiments over benchmarks consisting of representative Fortran programs and the evaluation results demonstrate the efficiency, effectiveness, and utility of the analyzer F-IKOS. The main contributions of this work are as follows:</p><p>• We proposed an approach to soundly abstract floating-point operations in Fortran programs, accounting for rounding errors during program analy-sis. • We developed F-IKOS, a static analyzer for Fortran programs, to implement the proposed approach. F-IKOS can soundly analyze floating-point types in Fortran programs. • Evaluation shows that F-IKOS can handle the complex syntax of Fortran programs and produce sound analysis results, outperforming other relevant Fortran analyzers.</p><p>The rest of the paper is organized as follows. Section 2 describes background. Section 3 presents the overview of our analyzer F-IKOS. Section 4 presents the proposed abstraction of floating-point expressions. Section 5 presents our analyzer implementation together with experimental results. Section 6 discusses some related work and Section 7 concludes.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="2.">Background</head></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="2.1.">The Fortran Programming Language</head><p>The Fortran programming language is a well-established high-level language with many syntax standards, such as Fortran 77 and Fortran 90. Fortran has similarities to other high-level programming languages. For example, Fortran includes common control structures such as conditional statements and looping control structures. However, Fortran programs often emphasize numerical computation tasks more than logical control functions. This is reflected by the fact that Fortran has a wealth of intrinsic functions, such as the trigonometric functions sin, cos, asin, and acos.</p><p>Besides, Fortran has a rich set of convenient array operations. Fortran supports flexible array boundaries, such as 𝑖𝑛𝑡𝑒𝑔𝑒𝑟 ∶∶ 𝑣(−3 ∶ 3), indicating that the index of array 𝑣 ranges from -3 to 3. It also provides a range of intrinsic functions for arrays, including sum and product, as well as matmul and dot_product for computing matrix products and dot products. Fortran inherently supports multidimensional arrays and offers mechanisms for array slicing and reshaping. For instance, the reshape function facilitates altering the number of dimensions and the size of each dimension within an array. Due to these characteristics, Fortran is widely used in scientific and high-performance computing.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="2.2.">The Floating-point Representation</head><p>The floating-point representation adheres to the IEEE-754 standard. Many high-precision real numbers, cannot be exactly represented by floating-point numbers. The IEEE-754 standard provides four rounding modes: nearest, zero, −∞, and +∞, to approximate real numbers using floatingpoint numbers. This approximation can introduce rounding errors, which result in inexactness.</p><p>Due to rounding errors, mathematical properties followed by real number operations do not hold in floating-point operations. We illustrate it with an example. To distinguish between real and floating-point numbers and their respective operators, we employ 𝑟𝑛𝑑(⋅) to represent floating-point numbers in machines and denote real number operators using symbols +, −, ×, /, while denoting floating-point operators using ⊕ 𝑓 ,𝑟 , ⊖ 𝑓 ,𝑟 , ⊗ 𝑓 ,𝑟 , ⊘ 𝑓 ,𝑟 where the subscripts 𝑓 , 𝑟 denote different precision and rounding modes. Real numbers like 0.1, 0.2, and 0.3 cannot be exactly represented by machines.</p><p>Under real number semantics, the equation 0.1 + 0.2 = 0.3 holds. But in machines, 𝑟𝑛𝑑(0.1) ⊕ 𝑓 ,𝑟 𝑟𝑛𝑑(0.2) is not equal to 𝑟𝑛𝑑(0.3). Furthermore, the law of association and distribution is not always true in floating-point operations. E.g., it may happen that (𝑟𝑛𝑑(𝑎)⊕ 𝑓 ,𝑟 𝑟𝑛𝑑(𝑏))⊕ 𝑓 ,𝑟 𝑟𝑛𝑑(𝑐) ≠ 𝑟𝑛𝑑(𝑎)⊕ 𝑓 ,𝑟 (𝑟𝑛𝑑(𝑏)⊕ 𝑓 ,𝑟 𝑟𝑛𝑑(𝑐))</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="2.3.">Rounding Model of IEEE-754</head><p>A simplified rounding model of the IEEE-754 standard follows the equation below:</p><formula xml:id="formula_0">𝑟𝑛𝑑(𝑥) = 𝑥 × (1 + 𝑒) + 𝑑</formula><p>where |𝑒| ≤ 𝜖, |𝑑| ≤ 𝛿, and 𝑒 × 𝑑 = 0. When 𝑥 is a normalized number, it holds that 𝑑 = 0, and when 𝑥 is a denormalized number, it holds that 𝑒 = 0. Here, 𝜖 denotes the maximum relative error for normalized numbers, and 𝛿 describes the maximum absolute error for denormalized numbers for specific precision of floating-point numbers.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="2.4.">Linearization</head><p>An interval linear expression is an expression where the coefficients may be intervals instead of scalars. For instance,</p><formula xml:id="formula_1">𝑧 = [𝑏 1 , 𝑐 1 ]𝑥 + [𝑏 2 , 𝑐 2 ]𝑦</formula><p>Interval linear expressions, in which the coefficients are intervals, can be abstracted into linear expressions with scalar coefficients. This process is linearization, and it is defined as follows:</p><p>Definition 1 (Linearization). An interval linear expression ∑ 𝑖 [𝑎 𝑖 , 𝑏 𝑖 ] × 𝑥 𝑖 + [𝑐, 𝑑] can be linearized into a linear expression ∑ 𝑖 𝑒 𝑖 ×𝑥 𝑖 +[𝑐 ′ , 𝑑 ′ ], where 𝑒 𝑖 ∈ [𝑎 𝑖 , 𝑏 𝑖 ] and satisfying</p><formula xml:id="formula_2">∑ 𝑖 [𝑎 𝑖 , 𝑏 𝑖 ] × 𝑥 𝑖 + [𝑐, 𝑑] ⊆ ∑ 𝑖 𝑒 𝑖 × 𝑥 𝑖 + [𝑐 ′ , 𝑑 ′ ] for all 𝑥 𝑖 ∈ [𝑥 𝑖 , 𝑥 𝑖 ]</formula><p>where 𝑥 𝑖 ≤ 𝑥 𝑖 ≤ 𝑥 𝑖 .</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="3.">Overview</head><p>In this section, we give an overview of our approach. We develop a static analyzer on top of IKOS <ref type="bibr" target="#b9">[10]</ref>, named F-IKOS, to perform sound analysis of floating-point types in Fortran programs. The architecture and workflow of F-IKOS are illustrated in Fig. <ref type="figure" target="#fig_0">1</ref>, highlighting our modifications to enable the sound analysis of floating-point types in Fortran programs. Initially, F-IKOS takes Fortran programs as input and uses the parser Flang <ref type="bibr" target="#b4">[5]</ref> to translate programs into LLVM IR. Subsequently, after optimization and processing, F-IKOS uses extended IKOS together with numerical abstract domains from Apron <ref type="bibr" target="#b5">[6]</ref> to analyze the LLVM IR and obtain invariants of programs. Finally, potential runtime errors in programs are checked by utilizing these invariants.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="4.">Approach</head><p>Fortran programs involve numerous floating-point operations, and analyzing these programs within the abstract interpretation framework by simply treating floating-point expressions as real-number expressions may result in unsound results. This occurs because floating-point numbers in programs are rounded before being passed to abstract domains (e.g., Apron <ref type="bibr" target="#b5">[6]</ref>). For example, within the polyhedra abstract domain, linear constraints between variables are collected is not equivalent to (𝑥 + 𝑦) under real-number semantics.</p><p>To address this challenge, Miné <ref type="bibr" target="#b18">[19]</ref> proposes to overapproximately abstract floating-point expressions into realnumber expressions. The approach includes the following three steps:</p><p>1. Abstract the deterministic semantics of floatingpoint expressions into non-deterministic semantics on real-number expressions. 2. Convert the non-deterministic semantics of real numbers into deterministic semantics for real numbers.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="3.">Analyze programs with real-number operations us-</head><p>ing abstract domains initially designed for programs with real-number types.</p><p>In this section, we present the following three steps: sound abstraction of floating-point expressions, linearization of interval linear expressions, and the analysis of programs using abstract domains.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="4.1.">Abstraction of Floating-point Expressions</head><p>Abstraction of floating-point numbers. Floating-point types in Fortran programs adhere to the IEEE-754 standard.</p><p>Given the value of a floating-point number and its precision, using the rounding model outlined in Section 2.3, we can compute the relation of 𝑟𝑛𝑑(𝑥) and 𝑥 (the interval range) as follows.</p><p>When 𝑥 is a normalized number, the relation of 𝑥 and 𝑟𝑛𝑑(𝑥) can be represented as:</p><formula xml:id="formula_3">𝑟𝑛𝑑(𝑥) = 𝑥 × [1 − 𝜖, 1 + 𝜖]<label>(1)</label></formula><p>When 𝑥 is a denormalized number (i.e., close to zero), the relation of 𝑥 and 𝑟𝑛𝑑(𝑥) is given by:</p><formula xml:id="formula_4">𝑟𝑛𝑑(𝑥) = 𝑥 + [−𝛿, 𝛿]<label>(2)</label></formula><p>where 𝜖 denotes the maximum relative error for normalized numbers, and 𝛿 represents the maximum absolute error for  <ref type="table" target="#tab_0">1</ref> illustrates the values of 𝜖 and 𝛿 for various floating-point types. To enhance generality, we express the conversion between a floating-point number and its corresponding real interval range before rounding using Formula 3. This provides an over-approximation of 𝑥 given by Formula 1 and 2 regardless of whether 𝑥 is a normalized or denormalized number.</p><formula xml:id="formula_5">𝑟𝑛𝑑(𝑥) = 𝑥 × ([1 − 𝜖, 1 + 𝜖]) + [−𝛿, 𝛿]<label>(3)</label></formula><p>Abstraction of Expressions with Floating-Point Operators. <ref type="bibr">Miné [19]</ref> proposes a method for abstracting expressions involving floating-point operators into real-number expressions. This approach captures rounding errors of floating-point arithmetic by over-approximating the behavior of floating-point operators using real-number semantics. Assume that 𝑟𝑛𝑑(𝑥) and 𝑟𝑛𝑑(𝑦) are two floating-point expressions, with 𝑥 and 𝑦 representing the corresponding real-number expressions. Let 𝑎 and 𝑏 be real numbers, and let 𝜖 and 𝛿 denote the relative and absolute errors, respectively, which depend on the precision of the floating-point types.</p><p>Non-linear operators (such as ⊗ 𝑓 ,𝑟 and ⊘ 𝑓 ,𝑟 ) can be handled by applying the corresponding operator on intervals after "intervalizing" the arguments <ref type="bibr" target="#b18">[19]</ref>. The operator | ⋅ | 𝜄 is used to "intervalize" the argument by a single interval <ref type="bibr" target="#b18">[19]</ref>. When multiplying two linear forms that have not been reduced to an interval, the operator | ⋅ |𝜄 can be applied to either argument. Similarly, operator | ⋅ | 𝜄 can be applied to the divisor to obtain a single interval before performing division.</p><p>The abstraction is described as follows <ref type="bibr" target="#b18">[19]</ref>:</p><formula xml:id="formula_6">𝑥 ⊕ 𝑓 ,𝑟 𝑦 = (𝑥 + 𝑦) × [1 − 𝜖, 1 + 𝜖] + [−𝛿, 𝛿] 𝑥 ⊖ 𝑓 ,𝑟 𝑦 = (𝑥 − 𝑦) × [1 − 𝜖, 1 + 𝜖] + [−𝛿, 𝛿] 𝑥 ⊗ 𝑓 ,𝑟 [𝑎 0 , 𝑏 0 ] = 𝑥 × [1 − 𝜖, 1 + 𝜖] ⋅ [𝑎 0 , 𝑏 0 ] + [−𝛿, 𝛿] [𝑎 0 , 𝑏 0 ] ⊗ 𝑓 ,𝑟 𝑥 = 𝑥 ⊗ 𝑓 ,𝑟 [𝑎 0 , 𝑏 0 ] 𝑥 ⊗ 𝑓 ,𝑟 𝑦 = 𝑥 × [1 − 𝜖, 1 + 𝜖] ⋅ |𝑦| 𝜄 + [−𝛿, 𝛿] 𝑜𝑟 𝑥 ⊗ 𝑓 ,𝑟 𝑦 = 𝑦 × [1 − 𝜖, 1 + 𝜖] ⋅ |𝑥| 𝜄 + [−𝛿, 𝛿] 𝑥 ⊘ 𝑓 ,𝑟 [𝑎 0 , 𝑏 0 ] = 𝑥 × [1 − 𝜖, 1 + 𝜖]/[𝑎 0 , 𝑏 0 ] + [−𝛿, 𝛿] 𝑥 ⊘ 𝑓 ,𝑟 𝑦 = 𝑥 × [1 − 𝜖, 1 + 𝜖]/|𝑦| 𝜄 + [−𝛿, 𝛿]<label>(4)</label></formula><p>Abstraction of Floating-point Expressions. In Fortran programs, variables (or constants) and operators in expressions are under floating-point semantics. We abstract expressions that involve floating-point variables and perform floating-point arithmetic into real-number expressions, which involve real-number variables and real-number operators.</p><p>The floating-point expression 𝑟𝑛𝑑(𝑥) ⊕ 𝑓 ,𝑟 𝑟𝑛𝑑(𝑦) can be abstracted into a real-number expression as follows:</p><formula xml:id="formula_7">𝑟𝑛𝑑(𝑥) ⊕ 𝑓 ,𝑟 𝑟𝑛𝑑(𝑦)</formula><p>where</p><formula xml:id="formula_8">𝑟𝑛𝑑(𝑥) = 𝑥 × [1 − 𝜖, 1 + 𝜖] + [−𝛿, 𝛿] 𝑟𝑛𝑑(𝑦) = 𝑦 × [1 − 𝜖, 1 + 𝜖] + [−𝛿, 𝛿]</formula><p>Substituting these into the expression, we get</p><formula xml:id="formula_9">(𝑥×([1−𝜖, 1+𝜖])+[−𝛿, 𝛿])⊕ 𝑓 ,𝑟 (𝑦 ×([1−𝜖, 1+𝜖])+[−𝛿, 𝛿])<label>(5)</label></formula><p>Since 𝑥 ⊕ 𝑓 ,𝑟 𝑦 = 𝑟𝑛𝑑(𝑥 + 𝑦), we convert Formula 5 as:</p><formula xml:id="formula_10">𝑟𝑛𝑑(((𝑥 + 𝑦)([1 − 𝜖, 1 + 𝜖]) + 2 × [−𝛿, 𝛿]))</formula><p>Thus, the expression 𝑟𝑛𝑑(𝑥) ⊕ 𝑓 ,𝑟 𝑟𝑛𝑑(𝑦) can be abstracted as:</p><formula xml:id="formula_11">(𝑥 + 𝑦)[(1 − 𝜖) 2 , (1 + 𝜖) 2 ] + [−(3 + 2𝜖)𝛿, (3 + 2𝜖)𝛿]<label>(6)</label></formula><p>By following this approach, the expression 𝑟𝑛𝑑(𝑥) ⊖ 𝑓 ,𝑟 𝑟𝑛𝑑(𝑦) can be abstracted into its corresponding real-number expression, as illustrated:</p><formula xml:id="formula_12">(𝑥 − 𝑦)[(1 − 𝜖) 2 , (1 + 𝜖) 2 ] + [−(3 + 2𝜖)𝛿, (3 + 2𝜖)𝛿] (7)</formula><p>When multiplying two linear forms, the operator | ⋅ |𝜄 can be applied to either argument to obtain an interval range of the argument. In this case, we apply | ⋅ |𝜄 to the second argument. The floating-point expression 𝑟𝑛𝑑(𝑥) ⊗ 𝑓 ,𝑟 𝑟𝑛𝑑(𝑦) can be abstracted through the following steps:</p><formula xml:id="formula_13">Assume [𝑎, 𝑏] = |𝑟𝑛𝑑(𝑦)|𝜄 × [1 − 𝜖, 1 + 𝜖] + [−𝛿, 𝛿], then 𝑟𝑛𝑑(𝑥) ⊗ 𝑓 ,𝑟 𝑟𝑛𝑑(𝑦) can be converted into 𝑟𝑛𝑑(𝑥) ⊗ 𝑓 ,𝑟 [𝑎, 𝑏]<label>(8)</label></formula><p>Given that</p><formula xml:id="formula_14">𝑟𝑛𝑑(𝑥) = 𝑥 × [1 − 𝜖, 1 + 𝜖] + [−𝛿, 𝛿] and 𝑥 ⊗ 𝑓 ,𝑟 [𝑎 0 , 𝑏 0 ] = 𝑟𝑛𝑑(𝑥 × [𝑎 0 , 𝑏 0 ]) = 𝑥 × [1 − 𝜖, 1 + 𝜖] ⋅ [𝑎 0 , 𝑏 0 ] + [−𝛿, 𝛿],</formula><p>we can express Formula 8 as follows:</p><formula xml:id="formula_15">𝑟𝑛𝑑 (𝑥 × [1 − 𝜖, 1 + 𝜖] ⋅ [𝑎, 𝑏] + [−𝛿, 𝛿] ⋅ [𝑎, 𝑏])</formula><p>Thus, the expression 𝑟𝑛𝑑(𝑥) ⊗ 𝑓 ,𝑟 𝑟𝑛𝑑(𝑦) can be abstracted as:</p><formula xml:id="formula_16">𝑥 ×[(1−𝜖) 2 , (1+𝜖) 2 ]⋅[𝑎, 𝑏]+[−(1+𝜖)𝛿, (1+𝜖)𝛿]⋅[𝑎, 𝑏]+[−𝛿, 𝛿]<label>(9)</label></formula><p>Similarly, we apply | ⋅ |𝜄 to the divisor to obtain a single interval before performing the division. The floating-point expression 𝑟𝑛𝑑(𝑥) ⊘ 𝑓 ,𝑟 𝑟𝑛𝑑(𝑦) can then be abstracted into its corresponding real-number expression, as illustrated below:</p><formula xml:id="formula_17">𝑥×[(1−𝜖) 2 , (1+𝜖) 2 ]</formula></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>/[𝑎, 𝑏]+[−(1+𝜖)𝛿, (1+𝜖)𝛿]/[𝑎, 𝑏]+[−𝛿, 𝛿]</head><p>(10) The coefficients of variables within the real-number expressions obtained by abstraction are represented as realnumber intervals. However, many abstract domains cannot process such interval-coefficient forms, as they only support linear expressions.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="4.2.">Linearization of Interval Linear Expressions</head><p>To enable existing numerical abstract domains (e.g., polyhedra abstract domain) to handle interval linear expressions, Miné <ref type="bibr" target="#b18">[19]</ref> proposes to linearize these interval linear expressions to linear expressions. We provide the proof of the soundness of the linearization operator through the following reasoning:</p><formula xml:id="formula_18">∑ 𝑖 [𝑎 𝑖 , 𝑏 𝑖 ] × 𝑥 𝑖 + [𝑐, 𝑑] ⟺ ∑ 𝑖 (𝑒 𝑖 + [𝑎 𝑖 − 𝑒 𝑖 , 𝑏 𝑖 − 𝑒 𝑖 ]) × 𝑥 𝑖 + [𝑐, 𝑑] ⟺ ∑ 𝑖 𝑒 𝑖 × 𝑥 𝑖 + ∑ 𝑖 [𝑎 𝑖 − 𝑒 𝑖 , 𝑏 𝑖 − 𝑒 𝑖 ] × 𝑥 𝑖 + [𝑐, 𝑑]</formula><p>can be over-approximated as</p><formula xml:id="formula_19">∑ 𝑖 𝑒 𝑖 × 𝑥 𝑖 + ([𝑎 𝑖 − 𝑒 𝑖 , 𝑏 𝑖 − 𝑒 𝑖 ] × [𝑥 𝑖 , 𝑥 𝑖 ]) + [𝑐, 𝑑] since it holds that [𝑎 𝑖 − 𝑒 𝑖 , 𝑏 𝑖 − 𝑒 𝑖 ] × 𝑥 𝑖 ⊆ [𝑎 𝑖 − 𝑒 𝑖 , 𝑏 𝑖 − 𝑒 𝑖 ] × [𝑥 𝑖 , 𝑥 𝑖 ],</formula><p>where 𝑎 𝑖 ≤ 𝑒 𝑖 ≤ 𝑏 𝑖 and 𝑥 𝑖 ≤ 𝑥 𝑖 ≤ 𝑥 𝑖 .</p><p>Note that following the same principle, an interval linear inequality ∑ 𝑖 [𝑎 𝑖 , 𝑏 𝑖 ]×𝑥 𝑖 +[𝑐, 𝑑] ≤ 0 can be also linearized into a linear inequality in the form of ∑ 𝑖 𝑒 𝑖 ×𝑥 𝑖 +[𝑐 ′ , 𝑑 ′ ] ≤ 0 in the sense of weak solution <ref type="bibr" target="#b22">[23]</ref>. It means that a weak solution of an interval linear inequality ∑ 𝑖 [𝑎 𝑖 , 𝑏 𝑖 ] × 𝑥 𝑖 + [𝑐, 𝑑] ≤ 0 will be a solution of ∑ 𝑖 𝑒 𝑖 × 𝑥 𝑖 + [𝑐 ′ , 𝑑 ′ ] ≤ 0 (but the reverse does not hold). This approach over-approximates interval linear expressions (or inequalities) up into linear expressions (or inequalities).</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="4.3.">Analyze programs with existing abstract domains</head><p>Due to the sound handling of rounding errors inherent in floating-point operations through the above abstraction and linearization procedure, we can now obtain sound results using abstract domains initially designed for real-number semantics.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="5.">Implementation and Evaluation</head></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="5.1.">Implementation</head><p>We have implemented a static analyzer for Fortran programs, named F-IKOS, with over 4K LOC of C++ code by extending IKOS. F-IKOS is endowed with the capability to perform sound analysis of floating-point types in Fortran programs.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="5.2.">Research Questions and Experimental Setup</head><p>To evaluate F-IKOS, we compare it with two most relevant Fortran program analyzers, SMACK <ref type="bibr" target="#b6">[7]</ref> and CIVL <ref type="bibr" target="#b7">[8]</ref>. Both SMACK and CIVL translate Fortran programs into IR for subsequent verification using IR-compatible verifiers, mainly based on model checking. They are designed to verify certain program properties but do not directly detect potential errors in Fortran programs. We investigate the following three research questions across the analyzers:</p><p>• RQ1: How effective is F-IKOS in analyzing simple Fortran programs? • RQ2: How well does F-IKOS handle complex features of Fortran programs? • RQ3: How does F-IKOS perform when applied to real-world Fortran programs?</p><p>To address these questions, we conducted three experiments to evaluate the capabilities of F-IKOS. The benchmarks employed in our experiments are categorized into three distinct classes:</p><p>• 36 Fortran programs used by SMACK <ref type="bibr" target="#b6">[7]</ref> and CIVL <ref type="bibr" target="#b7">[8]</ref>,</p><p>which are used to evaluate F-IKOS's ability to handle simple syntaxs and accomplish verification tasks. • 45 real-world Fortran programs extracted from opensource repositories <ref type="bibr" target="#b21">[22,</ref><ref type="bibr" target="#b20">21]</ref>, encompassing various Fortran syntax standards. • 10 artificially constructed programs, derived from the repository <ref type="bibr" target="#b19">[20]</ref>, designed to evaluate the capability of F-IKOS in detecting runtime errors associated with floating-point types.</p><p>All experiments were conducted on a PC running Ubuntu 20.04 (16GB Memory) in the Oracle VirtualBox 6.1.30 with a 3.3GHz Intel Core i9 CPU. The abstract domain used is Polka <ref type="bibr" target="#b5">[6]</ref>, which is an implementation of the Polyhedra abstract domain in Apron.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="5.3.">RQ1: Verifying simple Fortran programs</head><p>We analyzed 36 simple Fortran programs from the first benchmark <ref type="bibr" target="#b6">[7,</ref><ref type="bibr" target="#b7">8]</ref>, excluding parallel and recursive program instances. The experimental results are presented in Table <ref type="table">2</ref>, where "F-IKOS Time (s)", "SMACK Time(s)" and "CIVL Time (s)" denote the execution time of F-IKOS, SMACK, and CIVL, respectively. In the last row of Table <ref type="table">2</ref>, the average execution time of programs is recorded. Specifically, SMACK successfully verified only 19 out of 36 programs. In contrast, CIVL correctly verified all 36 programs, and F-IKOS successfully completed the analysis of the majority (30 out of 36). Further analysis of the unverified programs by F-IKOS reveals that most required disjunctive invariants for successful verification, are out of the expressiveness of the used polyhedra abstract domain, whereas CIVL, with the help of the SMT solver (i.e., Z3), can address them effectively.</p><p>Furthermore, a comparative analysis of the average execution time reveals that F-IKOS exhibits shorter analysis time, approximately 5% of SMACK's and 10% of CIVL's. The experimental results underscore F-IKOS's ability to achieve a delicate balance between analysis efficiency and effectiveness, demonstrating its strengths compared to existing state-of-the-art Fortran analyzers.</p><p>RQ-1 Answer: F-IKOS undergoes comparison with SMACK and CIVL for the analysis of 36 Fortran programs. It successfully verified 30 out of 36 programs, exhibiting a shorter average execution time compared with state-of-theart approach and about 10% of CIVL's. The results highlight the efficiency and effectiveness of F-IKOS in analyzing simple Fortran programs.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="5.4.">RQ2: Handling complex feature operations</head><p>We analyzed 45 Fortran programs from the second benchmark. The programs in this benchmark utilize features and intrinsic functions in Fortran that have not been previously examined. Some programs exemplify common Fortran programming conventions, while others involve algorithmic implementations. The inclusion of integer and floatingpoint types, along with arrays, increases the complexity of analyzing the programs.</p><p>In addition to the Fortran 90 standard programs, some programs following Fortran 77, and Fortran 95 standards are also included in bold in the table. The evaluation results in the efficiency and effectiveness of the analyzers are shown in Table <ref type="table" target="#tab_3">3</ref>. "F-IKOS (s)" and "F-IKOS FP" illustrate the Execution Time and False Positives (FP) of F-IKOS, respectively.</p><p>The experimental results demonstrate that both SMACK and CIVL to analyze the 45 programs in benchmark and find that SMACK can parse 37 out of 45 programs, whereas CIVL can only parse 3 out of 45. In contrast, F-IKOS can analyze all programs within an average time of 1.79s while maintaining an acceptable average of 3 false positives per program. In particular, when analyzing programs that use intrinsic functions to manipulate Fortran's arrays, F-IKOS issues some false positives. The reason for these false positives lies in the differences between Fortran arrays and common high-level language arrays. RQ-2 Answer: F-IKOS maintains analytical capabilities when dealing with intrinsic functions. F-IKOS successfully analyzed all Fortran programs within an average time of </p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="5.5.">RQ3: Handling real-world programs</head><p>We evaluated the capability of F-IKOS to detect runtime errors in larger programs from the third benchmark. To objectively demonstrate F-IKOS's capabilities, we intentionally injected 10 division-by-zero bugs into some of these programs. Our evaluation metrics include both analysis time and accuracy. The accuracy of the analysis is defined as follows: 𝐴𝑐𝑐𝑢𝑟𝑎𝑐𝑦 = 𝑇 𝑃 𝑇 𝑃 + 𝐹 𝑃 where 𝑇 𝑃 represents the number of true positives, and 𝐹 𝑃 denotes the number of false positives.</p><p>The experimental results are represented in Table <ref type="table" target="#tab_4">4</ref>, where "F-IKOS TP" and "F-IKOS FP" denote true positives and false positives of F-IKOS, respectively. SMACK successfully parsed 7 programs, but it failed to detect runtime errors within them. CIVL couldn't parse any of the 10 programs. In contrast, F-IKOS detected all runtime errors, achieving an accuracy of 22.2%. The programs include both custom and Fortran intrinsic functions, exhibiting more complex numerical characteristics. The results demonstrate the effectiveness of F-IKOS to detect runtime errors in numerical computation programs. Regardless of the rounding mode used by machines, our analysis of Fortran programs remains sound, ensuring consistent and sound analysis results across different computational environments.</p><p>We find that some programs require more time for analysis. Two primary factors contribute to the long execution time. Firstly, our experiments utilize the polyhedra abstract domain, which can be computationally expensive for certain programs. Additionally, real-world programs often exhibit distinct numerical characteristics, particularly due to the presence of loops and arrays, which demand more timeintensive processing.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>RQ-3 Answer:</head><p>The results show that SMACK parses 7 out of 10 Fortran programs, while CIVL fails to parse any. Moreover, neither tools can detect runtime errors in the programs they parse. In contrast, F-IKOS soundly analyzes all programs and successfully detects runtime errors, demonstrating its effectiveness in handling Fortran numerical programs.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="6.">Related Work</head><p>In the literature, there exists several tools to analyze or verify Fortran programs. Some tools such as f2c <ref type="bibr" target="#b2">[3]</ref> and FABLE <ref type="bibr" target="#b10">[11]</ref>  <ref type="bibr" target="#b12">[13]</ref>, ftnchek <ref type="bibr" target="#b11">[12]</ref> and Coverity <ref type="bibr" target="#b13">[14]</ref> specializes in predefined, general-purpose defect detection within Fortran programs, lacking the comprehensive capability to analyze program properties semantically. In contrast, CamFort <ref type="bibr" target="#b14">[15]</ref> incorporates a lightweight declarative specification language capable of both checking and inferring specifications. SMACK <ref type="bibr" target="#b6">[7]</ref> and CIVL <ref type="bibr" target="#b7">[8]</ref> translate Fortran programs into Intermediate Representation (IR) for subsequent verification using IR-compatible verifiers. Specifically, SMACK converts Fortran programs to LLVM IR and then verifies LLVM IR via Corral <ref type="bibr" target="#b8">[9]</ref>, wherein Corral restricts the syntax of expressions in this language to one that can be efficiently decided by a SMT solver. CIVL <ref type="bibr" target="#b7">[8]</ref> converts Fortran programs to CIVL-C which is an Intermediate Verification Language (IVL), which is subsequently verified using model checking and symbolic execution. However, their work mainly focuses on the verification of Fortran programs, without addressing runtime error detection. In this paper, we use F-IKOS to support the sound analysis of Fortran programs with complex features.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="7.">Conclusion</head><p>In this paper, we present F-IKOS, an abstract interpretationbased static analyzer designed for Fortran programs. Particularly, F-IKOS provides a sound analysis for floating-point types in programs. F-IKOS first abstracts floating-point expressions into real-number expressions with interval coefficients, then linearizes these expressions into real-number expressions with scalar coefficients. These linear expressions are subsequently handled by abstract domains originally designed for real-number types to produce sound analysis results. Evaluation of three benchmarks demonstrates F-IKOS's efficiency and effectiveness than other relevant analyzers in the analysis of Fortran programs. </p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>ID</head></div><figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_0"><head>Figure 1 :</head><label>1</label><figDesc>Figure 1: Overview of F-IKOS</figDesc></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" type="table" xml:id="tab_0"><head>Table 1 Related</head><label>1</label><figDesc></figDesc><table><row><cell>Precision</cell><cell>𝜖</cell><cell>𝛿</cell></row><row><cell>single (32 bits)</cell><cell>2 −23</cell><cell>2 −149</cell></row><row><cell>double (64 bits)</cell><cell>2 −52</cell><cell>2 −1074</cell></row><row><cell>quad (128 bits)</cell><cell>2 −112</cell><cell>2 −16494</cell></row></table><note>/Absolute rounding errors for various types denormalized numbers for specific precision of 𝑥. Table</note></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" type="table" xml:id="tab_1"><head></head><label></label><figDesc>The core idea is as follows: Supposing variable 𝑥 𝑖 ranges over the interval [𝑥 𝑖 , 𝑥 𝑖 ], an interval linear expression Σ 𝑖 [𝑎 𝑖 , 𝑏 𝑖 ] × 𝑥 𝑖 + [𝑐, 𝑑] can be over-approximated by a linear expression of the form Σ 𝑖 𝑒 𝑖 × 𝑥 𝑖 + [𝑐 ′ , 𝑑 𝑖 [𝑎 𝑖 , 𝑏 𝑖 ] × 𝑥 𝑖 + [𝑐, 𝑑]), and letting x ∶= [𝑥, 𝑥] be the bounding box of variable x, the linearization operator is defined as 𝑖 × 𝑥 𝑖 + [𝑐 ′ , 𝑑 ′ ] where 𝑒 𝑖 is any real number in the interval [𝑎 𝑖 , 𝑏 𝑖 ], and [𝑐 ′ , 𝑑 ′ ] denotes the resulting interval of ∑ 𝑖 [𝑎 𝑖 − 𝑒 𝑖 , 𝑏 𝑖 − 𝑒 𝑖 ] × [𝑥 𝑖 , 𝑥 𝑖 ] + [𝑐, 𝑑]. Generally, we choose the midpoint of the interval 𝑒 𝑖 = (𝑎 𝑖 + 𝑏 𝑖 ) × 0.5.</figDesc><table><row><cell>𝜁 (𝜑, x)</cell></row></table><note>′ ]. This approach converts real-number interval linear expressions into real-number linear expressions with scalar coefficients. The existing numerical abstraction domain initially designed for real-number semantics can directly analyze these expressions. We present our approach to linearize interval linear expressions.Drawing inspiration from<ref type="bibr" target="#b1">[2,</ref><ref type="bibr" target="#b18">19]</ref>, we define the linearization of interval linear expressions within real-number semantics as follows:Definition 2 (Linearization Operator). Given an interval linear expression 𝜑 ∶ (∑ 𝑑𝑒𝑓 = ∑ 𝑖 𝑒</note></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" type="table" xml:id="tab_2"><head></head><label></label><figDesc>1.79s. Moreover, F-IKOS can be used to analyze Fortran programs adhering to multiple syntax standards, and the results show that F-IKOS performs better than SMACK and</figDesc><table><row><cell>ID</cell><cell>Program Name</cell><cell>Loc</cell><cell>F-IKOS Time (s)</cell><cell>SMACK Time (s)</cell><cell>CIVL Time (s)</cell></row><row><cell>P1</cell><cell>array</cell><cell>15</cell><cell>0.14</cell><cell>3.22</cell><cell>2.9</cell></row><row><cell>P2</cell><cell>arrary_fail</cell><cell>11</cell><cell>0.14</cell><cell>2.79</cell><cell>3.19</cell></row><row><cell>P3</cell><cell>compound</cell><cell>19</cell><cell>0.26</cell><cell>3.23</cell><cell>1.41</cell></row><row><cell>P4</cell><cell>compound_fail</cell><cell>19</cell><cell>0.31</cell><cell>2.77</cell><cell>1.48</cell></row><row><cell>P5</cell><cell>compound_fail_2</cell><cell>19</cell><cell>0.30</cell><cell>3.64</cell><cell>1.71</cell></row><row><cell>P6</cell><cell>compute</cell><cell>13</cell><cell>0.12</cell><cell>3.14</cell><cell>1.57</cell></row><row><cell>P7</cell><cell>compute_fail</cell><cell>13</cell><cell>0.15</cell><cell>2.67</cell><cell>1.50</cell></row><row><cell>P8</cell><cell>forloop</cell><cell>15</cell><cell>0.16</cell><cell>3.62</cell><cell>1.5</cell></row><row><cell>P9</cell><cell>forloop_fail</cell><cell>15</cell><cell>0.21</cell><cell>2.99</cell><cell>1.89</cell></row><row><cell>P10</cell><cell>function</cell><cell>36</cell><cell>0.18</cell><cell>4.10</cell><cell>1.82</cell></row><row><cell>P11</cell><cell>function_fail</cell><cell>36</cell><cell>0.19</cell><cell>3.83</cell><cell>1.62</cell></row><row><cell>P12</cell><cell>function_fail_2</cell><cell>35</cell><cell>0.23</cell><cell>6.29</cell><cell>1.74</cell></row><row><cell>P13</cell><cell>function_fail_3</cell><cell>35</cell><cell>0.25</cell><cell>7.39</cell><cell>1.65</cell></row><row><cell>P14</cell><cell>hello</cell><cell>14</cell><cell>0.14</cell><cell>3.07</cell><cell>1.39</cell></row><row><cell>P15</cell><cell>hello_fail</cell><cell>13</cell><cell>0.16</cell><cell>2.63</cell><cell>1.62</cell></row><row><cell>P16</cell><cell>inout</cell><cell>19</cell><cell>0.17</cell><cell>2.20</cell><cell>1.54</cell></row><row><cell>P17</cell><cell>inout_fail</cell><cell>19</cell><cell>0.20</cell><cell>2.70</cell><cell>1.51</cell></row><row><cell>P18</cell><cell>pointer</cell><cell>15</cell><cell>0.18</cell><cell>3.28</cell><cell>1.40</cell></row><row><cell>P19</cell><cell>pointer_fail</cell><cell>15</cell><cell>0.22</cell><cell>2.75</cell><cell>1.46</cell></row><row><cell>P20</cell><cell>abs</cell><cell>15</cell><cell>-</cell><cell>-</cell><cell>1.46</cell></row><row><cell>P21</cell><cell>abs_bad</cell><cell>15</cell><cell>-</cell><cell>-</cell><cell>1.54</cell></row><row><cell>P22</cell><cell>array_section</cell><cell>29</cell><cell>-</cell><cell>-</cell><cell>3.63</cell></row><row><cell>P23</cell><cell>array_section_bad</cell><cell>30</cell><cell>-</cell><cell>-</cell><cell>3.88</cell></row><row><cell>P24</cell><cell>intent_inout</cell><cell>24</cell><cell>0.19</cell><cell>-</cell><cell>2.02</cell></row><row><cell>P25</cell><cell>intent_out</cell><cell>25</cell><cell>0.17</cell><cell>-</cell><cell>2.66</cell></row><row><cell>P26</cell><cell>intent_out_bad</cell><cell>24</cell><cell>0.21</cell><cell>-</cell><cell>2.28</cell></row><row><cell>P27</cell><cell>mod_impl</cell><cell>25</cell><cell>0.17</cell><cell>-</cell><cell>2.05</cell></row><row><cell>P28</cell><cell>mod_impl_bad</cell><cell>25</cell><cell>0.18</cell><cell>-</cell><cell>2.11</cell></row><row><cell>P29</cell><cell>mod_spec</cell><cell>19</cell><cell>0.12</cell><cell>-</cell><cell>1.48</cell></row><row><cell>P30</cell><cell>mult_impl</cell><cell>25</cell><cell>0.13</cell><cell>-</cell><cell>1.73</cell></row><row><cell>P31</cell><cell>mult_impl_bad</cell><cell>25</cell><cell>0.13</cell><cell>-</cell><cell>1.86</cell></row><row><cell>P32</cell><cell>mult_spec</cell><cell>21</cell><cell>0.16</cell><cell>-</cell><cell>1.46</cell></row><row><cell>P33</cell><cell>short_circuit</cell><cell>37</cell><cell>-</cell><cell>-</cell><cell>3.57</cell></row><row><cell>P34</cell><cell>short_circuit_bad</cell><cell>35</cell><cell>-</cell><cell>-</cell><cell>3.53</cell></row><row><cell>P35</cell><cell>truncate</cell><cell>14</cell><cell>0.12</cell><cell>-</cell><cell>1.42</cell></row><row><cell>P36</cell><cell>truncate_bad</cell><cell>14</cell><cell>0.14</cell><cell>-</cell><cell>1.63</cell></row><row><cell></cell><cell>Average</cell><cell>22</cell><cell>0.18</cell><cell>3.49</cell><cell>1.98</cell></row><row><cell>Table 2</cell><cell></cell><cell></cell><cell></cell><cell></cell><cell></cell></row><row><cell cols="2">Experimental results on 36 Fortran programs</cell><cell></cell><cell></cell><cell></cell><cell></cell></row><row><cell>CIVL.</cell><cell></cell><cell></cell><cell></cell><cell></cell><cell></cell></row></table></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" type="table" xml:id="tab_3"><head>Table 3</head><label>3</label><figDesc>, involve converting Fortran programs into other high-level languages (such as C++) programs, and then use Experimental results on 45 Fortran programs verifiers to conduct verification. Alternatively, FORTRANlint</figDesc><table><row><cell>ID</cell><cell>Program</cell><cell>Loc</cell><cell>F-IKOS (s)</cell><cell>F-IKOS FP</cell><cell>SMACK (s)</cell><cell>CIVL (s)</cell></row><row><cell>P1</cell><cell>arguments</cell><cell>41</cell><cell>2.40</cell><cell>0</cell><cell>2.43</cell><cell>-</cell></row><row><cell>P2</cell><cell>associate_bounds</cell><cell>9</cell><cell>0.99</cell><cell>0</cell><cell>2.71</cell><cell>-</cell></row><row><cell>P3</cell><cell>bounds</cell><cell>12</cell><cell>0.88</cell><cell>8</cell><cell>3.24</cell><cell>-</cell></row><row><cell>P4</cell><cell>boz</cell><cell>11</cell><cell>1.83</cell><cell>1</cell><cell>2.85</cell><cell>-</cell></row><row><cell>P5</cell><cell>case_insensitivity</cell><cell>15</cell><cell>0.18</cell><cell>1</cell><cell>2.43</cell><cell>-</cell></row><row><cell>P6</cell><cell>column_major</cell><cell>18</cell><cell>0.12</cell><cell>0</cell><cell>2.9</cell><cell>-</cell></row><row><cell>P7</cell><cell>compare_floats</cell><cell>15</cell><cell>2.14</cell><cell>0</cell><cell>3.25</cell><cell>-</cell></row><row><cell>P8</cell><cell>data</cell><cell>21</cell><cell>0.18</cell><cell>5</cell><cell>2.91</cell><cell>-</cell></row><row><cell>P9</cell><cell>derived_type_composition</cell><cell>21</cell><cell>1.31</cell><cell>0</cell><cell>2.73</cell><cell>-</cell></row><row><cell>P10</cell><cell>derived_type_implied_do</cell><cell>19</cell><cell>1.69</cell><cell>5</cell><cell>3.34</cell><cell>-</cell></row><row><cell>P11</cell><cell>dimension</cell><cell>13</cell><cell>0.36</cell><cell>0</cell><cell>2.67</cell><cell>-</cell></row><row><cell>P12</cell><cell>direct_access</cell><cell>28</cell><cell>5.16</cell><cell>15</cell><cell>-</cell><cell>-</cell></row><row><cell>P13</cell><cell>do_loop_index</cell><cell>18</cell><cell>0.17</cell><cell>0</cell><cell>3.14</cell><cell>0.99</cell></row><row><cell>P14</cell><cell>do_while</cell><cell>32</cell><cell>1.78</cell><cell>12</cell><cell>3.27</cell><cell>-</cell></row><row><cell>P15</cell><cell>error_stop</cell><cell>20</cell><cell>0.26</cell><cell>1</cell><cell>-</cell><cell>-</cell></row><row><cell>P16</cell><cell>get_command</cell><cell>23</cell><cell>1.49</cell><cell>3</cell><cell>3.27</cell><cell>-</cell></row><row><cell>P17</cell><cell>implicit_save</cell><cell>41</cell><cell>0.39</cell><cell>7</cell><cell>3.17</cell><cell>-</cell></row><row><cell>P18</cell><cell>intrinsic</cell><cell>50</cell><cell>1.18</cell><cell>0</cell><cell>2.93</cell><cell>-</cell></row><row><cell>P19</cell><cell>list_directed_read</cell><cell>20</cell><cell>1.65</cell><cell>0</cell><cell>3.23</cell><cell>-</cell></row><row><cell>P20</cell><cell>loop</cell><cell>10</cell><cell>0.16</cell><cell>4</cell><cell>2.91</cell><cell>1.59</cell></row><row><cell>P21</cell><cell>loop_bound</cell><cell>32</cell><cell>0.59</cell><cell>0</cell><cell>3.28</cell><cell>-</cell></row><row><cell>P22</cell><cell>loop_index</cell><cell>22</cell><cell>0.34</cell><cell>5</cell><cell>3.05</cell><cell>-</cell></row><row><cell>P23</cell><cell>loop_label</cell><cell>34</cell><cell>4.45</cell><cell>15</cell><cell>3.64</cell><cell>-</cell></row><row><cell>P24</cell><cell>merge</cell><cell>10</cell><cell>0.82</cell><cell>0</cell><cell>3.26</cell><cell>-</cell></row><row><cell>P25</cell><cell>module</cell><cell>16</cell><cell>0.12</cell><cell>0</cell><cell>2.7</cell><cell>-</cell></row><row><cell>P26</cell><cell>module_parameter</cell><cell>35</cell><cell>0.17</cell><cell>0</cell><cell>2.62</cell><cell>-</cell></row><row><cell>P27</cell><cell>open_file</cell><cell>27</cell><cell>1.93</cell><cell>2</cell><cell>2.98</cell><cell>-</cell></row><row><cell>P28</cell><cell>overlapping_arg</cell><cell>31</cell><cell>1.69</cell><cell>0</cell><cell>2.84</cell><cell>-</cell></row><row><cell>P29</cell><cell>print_implied_do_loop</cell><cell>22</cell><cell>3.10</cell><cell>16</cell><cell>4.27</cell><cell>-</cell></row><row><cell>P30</cell><cell>protected</cell><cell>29</cell><cell>0.34</cell><cell>0</cell><cell>2.87</cell><cell>-</cell></row><row><cell>P31</cell><cell>recursive_io</cell><cell>37</cell><cell>0.51</cell><cell>0</cell><cell>-</cell><cell>-</cell></row><row><cell>P32</cell><cell>scratch</cell><cell>19</cell><cell>1.27</cell><cell>6</cell><cell>3.47</cell><cell>-</cell></row><row><cell>P33</cell><cell>select_case</cell><cell>21</cell><cell>0.99</cell><cell>0</cell><cell>3.56</cell><cell>-</cell></row><row><cell>P34</cell><cell>slash</cell><cell>15</cell><cell>0.85</cell><cell>0</cell><cell>2.9</cell><cell>-</cell></row><row><cell>P35</cell><cell>sum_exit</cell><cell>14</cell><cell>0.23</cell><cell>5</cell><cell>3.11</cell><cell>1.52</cell></row><row><cell>P36</cell><cell>trim</cell><cell>9</cell><cell>0.26</cell><cell>0</cell><cell>2.63</cell><cell>-</cell></row><row><cell>P37</cell><cell>type_constructor_optional</cell><cell>23</cell><cell>0.75</cell><cell>0</cell><cell>2.75</cell><cell>-</cell></row><row><cell>P38</cell><cell>value</cell><cell>45</cell><cell>0.41</cell><cell>4</cell><cell>2.73</cell><cell>-</cell></row><row><cell>P39</cell><cell>write_char</cell><cell>15</cell><cell>0.76</cell><cell>0</cell><cell>2.67</cell><cell>-</cell></row><row><cell>P40</cell><cell>xrandom_int</cell><cell>17</cell><cell>4.60</cell><cell>4</cell><cell>-</cell><cell>-</cell></row><row><cell>P41</cell><cell>swap_arrays</cell><cell>51</cell><cell>5.12</cell><cell>2</cell><cell>-</cell><cell>-</cell></row><row><cell>P42</cell><cell>average</cell><cell>40</cell><cell>17.81</cell><cell>8</cell><cell>-</cell><cell>-</cell></row><row><cell>P43</cell><cell>submod</cell><cell>41</cell><cell>0.56</cell><cell>0</cell><cell>-</cell><cell>-</cell></row><row><cell>P44</cell><cell>linear_equations</cell><cell>27</cell><cell>7.29</cell><cell>3</cell><cell>-</cell><cell>-</cell></row><row><cell>P45</cell><cell>temp_converter</cell><cell>40</cell><cell>1.47</cell><cell>2</cell><cell>2.19</cell><cell>-</cell></row></table></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" type="table" xml:id="tab_4"><head>Table 4</head><label>4</label><figDesc>Experimental results on 10 Fortran programs</figDesc><table><row><cell></cell><cell>Program Name</cell><cell>Loc</cell><cell>F-IKOS (s)</cell><cell>F-IKOS TP</cell><cell>F-IKOS FP</cell><cell>SMACK (s)</cell><cell>CIVL (s)</cell></row><row><cell>P1</cell><cell>converter</cell><cell>41</cell><cell>1.06</cell><cell>0</cell><cell>2</cell><cell>2.95</cell><cell>-</cell></row><row><cell>P2</cell><cell>bubblesort</cell><cell>62</cell><cell>169.81</cell><cell>0</cell><cell>10</cell><cell>-</cell><cell>-</cell></row><row><cell>P3</cell><cell>libconstants</cell><cell>107</cell><cell>0.38</cell><cell>0</cell><cell>0</cell><cell>2.17</cell><cell>-</cell></row><row><cell>P4</cell><cell>simpson</cell><cell>53</cell><cell>11.62</cell><cell>0</cell><cell>5</cell><cell>3.65</cell><cell>-</cell></row><row><cell>P5</cell><cell>differentiation</cell><cell>39</cell><cell>4.48</cell><cell>0</cell><cell>5</cell><cell>-</cell><cell>-</cell></row><row><cell>P6</cell><cell>div</cell><cell>111</cell><cell>0.15</cell><cell>6</cell><cell>0</cell><cell>2.98</cell><cell>-</cell></row><row><cell>P7</cell><cell>expr</cell><cell>110</cell><cell>0.12</cell><cell>2</cell><cell>0</cell><cell>3.08</cell><cell>-</cell></row><row><cell>P8</cell><cell>function</cell><cell>112</cell><cell>12.01</cell><cell>2</cell><cell>0</cell><cell>3.05</cell><cell>-</cell></row><row><cell>P9</cell><cell>palindrome</cell><cell>51</cell><cell>63.05</cell><cell>0</cell><cell>7</cell><cell>-</cell><cell>-</cell></row><row><cell>P10</cell><cell>trapezodial</cell><cell>102</cell><cell>18.79</cell><cell>0</cell><cell>6</cell><cell>3.27</cell><cell>-</cell></row></table></figure>
		</body>
		<back>

			<div type="acknowledgement">
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="8.">Acknowledgments</head><p>We thank the reviewers for their constructive feedback. This work is supported by the National Key R&amp;D Program of China (No.2022YFA1005101) and the National Natural Science Foundation of China (Nos.62032024,62102432).</p></div>
			</div>

			<div type="references">

				<listBibl>

<biblStruct xml:id="b0">
	<monogr>
		<title level="m" type="main">Response to issues about floating-point program analysis in IKOS</title>
		<ptr target="https://github.com/NASA-SW-VnV/ikos/issues/224" />
		<imprint>
			<date type="published" when="2023">2023</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b1">
	<monogr>
		<title level="m" type="main">Sound floating-point and non-convex static analysis using interval linear abstract domains</title>
		<author>
			<persName><forename type="first">Liqian</forename><surname>Chen</surname></persName>
		</author>
		<imprint>
			<date type="published" when="2010">2010</date>
		</imprint>
		<respStmt>
			<orgName>National University of Defense Technology</orgName>
		</respStmt>
	</monogr>
</biblStruct>

<biblStruct xml:id="b2">
	<analytic>
		<title level="a" type="main">A Fortran to C converter</title>
		<author>
			<persName><forename type="first">Stuart</forename><forename type="middle">I</forename><surname>Feldman</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">ACM SIG-PLAN Fortran Forum</title>
		<imprint>
			<biblScope unit="volume">9</biblScope>
			<biblScope unit="issue">2</biblScope>
			<date type="published" when="1990">1990</date>
			<publisher>ACM</publisher>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b3">
	<monogr>
		<ptr target="https://llvm.org/" />
		<title level="m">LLVM homepage</title>
				<imprint>
			<date type="published" when="2000">2000</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b4">
	<monogr>
		<ptr target="https://github.com/flang-compiler/flang" />
		<title level="m">Flang Fortran language front-end homepage</title>
				<imprint/>
	</monogr>
</biblStruct>

<biblStruct xml:id="b5">
	<analytic>
		<title level="a" type="main">Apron: A library of numerical abstract domains for static analysis</title>
		<author>
			<persName><forename type="first">B</forename><surname>Jeannet</surname></persName>
		</author>
		<author>
			<persName><forename type="first">A</forename><surname>Miné</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Computer Aided Verification</title>
				<meeting><address><addrLine>Berlin, Heidelberg</addrLine></address></meeting>
		<imprint>
			<publisher>Springer</publisher>
			<date type="published" when="2009">2009</date>
			<biblScope unit="page" from="661" to="667" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b6">
	<analytic>
		<title level="a" type="main">Leveraging compiler intermediate representation for multi-and cross-language verification</title>
		<author>
			<persName><forename type="first">J</forename><forename type="middle">J</forename><surname>Garzella</surname></persName>
		</author>
		<author>
			<persName><forename type="first">M</forename><surname>Baranowski</surname></persName>
		</author>
		<author>
			<persName><forename type="first">S</forename><surname>He</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Z</forename><surname>Rakamaric</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Verification, Model Checking, and Abstract Interpretation: 21st International Conference, VMCAI 2020</title>
				<meeting><address><addrLine>New Orleans, LA, USA; Berlin, Heidelberg</addrLine></address></meeting>
		<imprint>
			<publisher>Springer</publisher>
			<date type="published" when="2020">January 16-21, 2020. 2020</date>
			<biblScope unit="page" from="90" to="111" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b7">
	<analytic>
		<title level="a" type="main">Verifying Fortran Programs with in</title>
		<author>
			<persName><forename type="first">W</forename><surname>Wu</surname></persName>
		</author>
		<author>
			<persName><forename type="first">J</forename><surname>Hückelheim</surname></persName>
		</author>
		<author>
			<persName><forename type="first">P</forename><forename type="middle">D</forename><surname>Hovland</surname></persName>
		</author>
		<author>
			<persName><forename type="first">S</forename><forename type="middle">F</forename><surname>Siegel</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">International Conference on Tools and Algorithms for the Construction and Analysis of Systems</title>
				<meeting><address><addrLine>Berlin, Heidelberg</addrLine></address></meeting>
		<imprint>
			<publisher>Springer</publisher>
			<date type="published" when="2022">2022</date>
			<biblScope unit="page" from="106" to="124" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b8">
	<analytic>
		<title level="a" type="main">A solver for reachability modulo theories</title>
		<author>
			<persName><forename type="first">A</forename><surname>Lal</surname></persName>
		</author>
		<author>
			<persName><forename type="first">S</forename><surname>Qadeer</surname></persName>
		</author>
		<author>
			<persName><forename type="first">S</forename><forename type="middle">K</forename><surname>Lahiri</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Computer Aided Verification: 24th International Conference, CAV 2012</title>
				<meeting><address><addrLine>Berkeley, CA, USA; Berlin, Heidelberg</addrLine></address></meeting>
		<imprint>
			<publisher>Springer</publisher>
			<date type="published" when="2012">July 7-13, 2012. 2012</date>
			<biblScope unit="page" from="427" to="443" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b9">
	<analytic>
		<title level="a" type="main">IKOS: A framework for static analysis based on abstract interpretation</title>
		<author>
			<persName><forename type="first">G</forename><surname>Brat</surname></persName>
		</author>
		<author>
			<persName><forename type="first">J</forename><forename type="middle">A</forename><surname>Navas</surname></persName>
		</author>
		<author>
			<persName><forename type="first">N</forename><surname>Shi</surname></persName>
		</author>
		<author>
			<persName><forename type="first">A</forename><surname>Venet</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Software Engineering and Formal Methods: 12th International Conference, SEFM 2014</title>
				<meeting><address><addrLine>Grenoble, France; Berlin, Heidelberg</addrLine></address></meeting>
		<imprint>
			<publisher>Springer</publisher>
			<date type="published" when="2014">September 1-5, 2014. 2014</date>
			<biblScope unit="page" from="271" to="277" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b10">
	<analytic>
		<title level="a" type="main">Automatic Fortran to C++ conversion with FABLE</title>
		<author>
			<persName><forename type="first">R</forename><forename type="middle">W</forename><surname>Grosse-Kunstleve</surname></persName>
		</author>
		<author>
			<persName><forename type="first">T</forename><forename type="middle">C</forename><surname>Terwilliger</surname></persName>
		</author>
		<author>
			<persName><forename type="first">N</forename><forename type="middle">K</forename><surname>Sauter</surname></persName>
		</author>
		<author>
			<persName><forename type="first">P</forename><forename type="middle">D</forename><surname>Adams</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">Source Code for Biology and Medicine</title>
		<imprint>
			<biblScope unit="volume">7</biblScope>
			<biblScope unit="page" from="1" to="11" />
			<date type="published" when="2012">2012</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b11">
	<analytic>
		<title level="a" type="main">An Automated Tool for Upgrading Fortran Codes</title>
		<author>
			<persName><forename type="first">L</forename><surname>Mak</surname></persName>
		</author>
		<author>
			<persName><forename type="first">P</forename><surname>Taheri</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">Software</title>
		<imprint>
			<biblScope unit="volume">1</biblScope>
			<biblScope unit="issue">3</biblScope>
			<biblScope unit="page" from="299" to="315" />
			<date type="published" when="2022">2022</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b12">
	<monogr>
		<ptr target="https://stellar.cleanscape.net/docs_lib/data_F-lint2.pdf" />
		<title level="m">FORTRAN-lint: a pre-compile analysis tool</title>
				<imprint/>
	</monogr>
</biblStruct>

<biblStruct xml:id="b13">
	<monogr>
		<ptr target="https://sig-product-docs.synopsys.com/bundle/coverity-docs/page/webhelp-files/fortran_start.html#in-troduction" />
		<title level="m">Coverity Fortran Syntax Analysis</title>
				<imprint/>
	</monogr>
</biblStruct>

<biblStruct xml:id="b14">
	<analytic>
		<title level="a" type="main">Verifying spatial properties of array computations</title>
		<author>
			<persName><forename type="first">D</forename><surname>Orchard</surname></persName>
		</author>
		<author>
			<persName><forename type="first">M</forename><surname>Contrastin</surname></persName>
		</author>
		<author>
			<persName><forename type="first">M</forename><surname>Danish</surname></persName>
		</author>
		<author>
			<persName><forename type="first">A</forename><surname>Rice</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proceedings of the ACM on Programming Languages</title>
				<meeting>the ACM on Programming Languages</meeting>
		<imprint>
			<publisher>OOPSLA</publisher>
			<date type="published" when="2017">2017</date>
			<biblScope unit="volume">1</biblScope>
			<biblScope unit="page" from="1" to="30" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b15">
	<analytic>
		<title level="a" type="main">Decoupling source language details from verifier implementations</title>
		<author>
			<persName><forename type="first">Z</forename><surname>Rakamarić</surname></persName>
		</author>
		<author>
			<persName><forename type="first">M</forename><surname>Emmi</surname></persName>
		</author>
		<author>
			<persName><surname>Smack</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Computer Aided Verification: 26th International Conference, CAV 2014, Held as Part of the Vienna Summer of Logic, VSL 2014</title>
				<meeting><address><addrLine>Vienna, Austria; Berlin, Heidelberg</addrLine></address></meeting>
		<imprint>
			<publisher>Springer</publisher>
			<date type="published" when="2014">July 18-22, 2014. 2014</date>
			<biblScope unit="page" from="106" to="113" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b16">
	<monogr>
		<ptr target="https://www.netlib.org/blas/" />
		<title level="m">BLAS (Basic Linear Algebra Subprograms</title>
				<imprint/>
	</monogr>
</biblStruct>

<biblStruct xml:id="b17">
	<analytic>
		<title level="a" type="main">Abstract interpretation: a unified lattice model for static analysis of programs by construction or approximation of fixpoints</title>
		<author>
			<persName><forename type="first">P</forename><surname>Cousot</surname></persName>
		</author>
		<author>
			<persName><forename type="first">R</forename><surname>Cousot</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proceedings of the 4th ACM SIGACT-SIGPLAN Symposium on Principles of Programming Languages</title>
				<meeting>the 4th ACM SIGACT-SIGPLAN Symposium on Principles of Programming Languages</meeting>
		<imprint>
			<date type="published" when="1977">1977</date>
			<biblScope unit="page" from="238" to="252" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b18">
	<analytic>
		<title level="a" type="main">Relational abstract domains for the detection of floating-point run-time errors</title>
		<author>
			<persName><forename type="first">A</forename><surname>Miné</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">European Symposium on Programming</title>
				<meeting><address><addrLine>Berlin, Heidelberg</addrLine></address></meeting>
		<imprint>
			<publisher>Springer</publisher>
			<date type="published" when="2004">2004</date>
			<biblScope unit="page" from="3" to="17" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b19">
	<monogr>
		<ptr target="https://github.com/as-trofrog/fortranlib" />
		<title level="m">fortranlib2024 homepage</title>
				<imprint/>
	</monogr>
</biblStruct>

<biblStruct xml:id="b20">
	<monogr>
		<ptr target="https://github.com/Beli-avsky/FortranTip" />
		<title level="m">FortranTip homepage</title>
				<imprint/>
	</monogr>
</biblStruct>

<biblStruct xml:id="b21">
	<monogr>
		<ptr target="https://github.com/WarwickRSE/Fortran4Re-searchers" />
		<title level="m">Fortran4Researchers homepage</title>
				<imprint/>
	</monogr>
</biblStruct>

<biblStruct xml:id="b22">
	<analytic>
		<title level="a" type="main">Solvability of systems of interval linear equations and inequalities</title>
		<author>
			<persName><forename type="first">M</forename><surname>Fiedler</surname></persName>
		</author>
		<author>
			<persName><forename type="first">J</forename><surname>Nedoma</surname></persName>
		</author>
		<author>
			<persName><forename type="first">J</forename><surname>Ramík</surname></persName>
		</author>
		<author>
			<persName><forename type="first">J</forename><surname>Rohn</surname></persName>
		</author>
		<author>
			<persName><forename type="first">K</forename><surname>Zimmermann</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Linear Optimization Problems with Inexact Data</title>
				<meeting><address><addrLine>Berlin, Heidelberg</addrLine></address></meeting>
		<imprint>
			<publisher>Springer</publisher>
			<date type="published" when="2006">2006</date>
			<biblScope unit="page" from="35" to="77" />
		</imprint>
	</monogr>
</biblStruct>

				</listBibl>
			</div>
		</back>
	</text>
</TEI>
