声明:本博文翻译自:https://www.tutorialspoint.com/fortran/fortran_operators.htm
一个运算符对编译器来说是一个符号:告诉编译器执行特定的数学操作或是逻辑运算。
fortran语言提供了下面几种运算符:
Arithmetic Operators  算术运算符
Relational Operators  关系运算符
Logical Operations  逻辑运算符
1. Arithmetic Operators
+ : 表示加法运算
- : 表示减法运算
* : 表示乘法运算
/ : 表示除法运算
**: 表示乘方运算
示例程序如下:
Program arithmeticOp
  implicit none  
  integer :: a, b, c
  a = 5   
  b = 3  
  c = a ** b  !.. 乘方
  write(*,'(1x,a,g0)') "c = ", c
  c = a * b  !.. 乘法
  write(*,'(1x,a,g0)') "c = ", c
  c = a / b  !.. 除法
  write(*,'(1x,a,g0)') "c = ", c
  c = a + b  !.. 加法
  write(*,'(1x,a,g0)') "c = ", c
  c = a - b  !.. 减法
  write(*,'(1x,a,g0)') "c = ", c
End program arithmeticOp
用ivf编译器,执行结果如下:
c = 125
c = 15
c = 1
c = 8
c = 2
2. 关系运算符
== : 相等运算符
/= : 不等运算符
 > :  大于运算符
 < :  小于运算符
>= :  大于等于运算符
<= :  小于等于运算符
示例程序如下:
Program RelationalOp
  implicit none
  integer :: a, b
  a = 10; b = 20
  if ( a == b ) write(*,'(1x,a)') "a == b"
  if ( a  > b ) write(*,'(1x,a)') "a > b"
  if ( a  < b ) write(*,'(1x,a)') "a < b"
  if ( a >= b ) write(*,'(1x,a)') "a >= b"
  if ( a <= b ) write(*,'(1x,a)') "a <= b"
  if ( a /= b ) write(*,'(1x,a)') "a /= b"
End program RelationalOp
用ivf,执行结果如下:
a <= b
a /= b
3. 逻辑运算符
设A = .true. B = .false.
则(A.and.B) is false
(A.or.B) is true
!(A.and.B) is true
(A.eqv.B) is false
(A.neqv.B) is true
这里:.eqv.用来检查两个逻辑变量是否相等
     .neqv.用来检查两个逻辑变量是否不等
Program logicalOp
  implicit none  
  logical :: a, b
  a = .true.   
  b = .false. 
  if (a .and. b) then
     write(*,'(1x,a)') "Line 1 - Condition is true"
     write(*,'(1x,a)') "Line 1 - Condition is false"
  end if
  if (a .or. b) then
     write(*,'(1x,a)') "Line 2 - Condition is true"
     write(*,'(1x,a)') "Line 2 - Condition is false"
  end if
  ! changing values 
  a = .false.   
  b = .true. 
  if (.not.(a .and. b)) then
     write(*,'(1x,a)') "Line 3 - Condition is true"
     write(*,'(1x,a)') "Line 3 - Condition is false"
  end if
  if (b .neqv. a) then
     write(*,'(1x,a)') "Line 4 - Condition is true"
     write(*,'(1x,a)') "Line 4 - Condition is false"
  end if
  if (b .eqv. a) then
     write(*,'(1x,a)') "Line 5 - Condition is true"
     write(*,'(1x,a)') "Line 5 - Condition is false"
  end if
End program logicalOp
用ivf,执行结果如下:
Line 1 - Condition is false
Line 2 - Condition is true
Line 3 - Condition is true
Line 4 - Condition is true
Line 5 - Condition is false
4. fortran中运算符的优先权
          Category                      Operator                         Associativity
Logical NOT and negative sign          .not. (-)                         Left to right
       Exponentiation                      **                            Left to right
       Multiplicative                      */                            Left to right
         Additive                          +-                            Left to right
         Relational                     < <= > >=                        Left to right
         Equality                        == /=                           Left to right 
        Logical AND                      .and.                           Left to right   
        Logical OR                       .or.                            Left to right
        Assignment                        =                              Right to left
示例程序如下:
Program precedenceOp
  implicit none  
  integer :: a, b, c, d, e
  a = 20   
  b = 10
  c = 15
  d = 5
  e = (a + b) * c / d      !.. ( 30 * 15 ) / 5
  write(*,'(1x,a,g0)') "Value of (a + b) * c / d = ",  e 
  e = ((a + b) * c) / d    !.. (30 * 15 ) / 5
  write(*,'(1x,a,g0)') "Value of ((a + b) * c) / d = ",  e 
  e = (a + b) * (c / d);   !.. (30) * (15/5)
  write(*,'(1x,a,g0)') "Value of (a + b) * (c / d) = ",  e 
  e = a + (b * c) / d;     !..  20 + (150/5)
  write(*,'(1x,a,g0)') "Value of a + (b * c) / d = " ,  e 
End program precedenceOp
用ivf,执行结果如下:
Value of (a + b) * c / d = 90
Value of ((a + b) * c) / d = 90
Value of (a + b) * (c / d) = 90
Value of a + (b * c) / d = 50
声明:本博文翻译自:https://www.tutorialspoint.com/fortran/fortran_operators.htm一个运算符对编译器来说是一个符号:告诉编译器执行特定的数学操作或是逻辑运算。fortran语言提供了下面几种运算符:Arithmetic Operators 算术运算符Relational Operators 关系运算符Logical Oper... 在 Fortran 中快速实现哈希映射 在 Fortran 中实现GCC哈希图结构。 通过使用宏,只要您实现(或编译器提供)相应的等价 运算符 (==),赋值 运算符 (=)和键类型的hash_value接口,它就可以支持任何类型的键和值。值类型的赋值 运算符 。 以下是我的 Fortran 实施和GCC 4.8标准库之间的基准测试: 对于14个整数数组作为键,将双精度浮点作为值,输入10M: Fortran 哈希: 插入:1.80 s 清洁:1.70 s 1.59 GB GCC unordered_map: 插入:2.02 s 清洁:0.61 s 1.38 GB 对于2整数数组作为键,将双精度浮点数作为值,输入20M: Fortran 哈希: 插入:2.66 s 清洁:2.54 s 2.57 GB GCC unordered_map: 插入:3.60 s 同类型之间的运算仍然保持原类型 参加运算的操作数为不同类型,则编译系统会将他们转换为同一类型后进行计算。一般是类型较低的 运算符 转换为类型级别较高的 运算符 。类型由高到低一般为复型,实型,整型。 关系 运算符 .LT.小于 .LE.小于等于 .EQ.等于 .NE.不等于 .GT.大于 .GE.大于等于
为了实现分子按照特定方向转向,参考之前利用VESTA手动截取晶面并采用矩阵计算转向的方法,用 fortran 编写了一个实现简单矩阵计算功能的小程序,用于处理矩阵加、减、乘、除、行列式值、求逆、转置几类计算,主要是求逆和 除法 的实现。 求逆采用了初等变换和利用伴随矩阵两种方法,但编译好的应当时默认利用伴随矩阵方法。 缺点:计算种类简单,后续应参考“云算子”增加“线性方程组、特征值和特征向量、Chol...
这里写自定义目录标题复数运算复数定义复数可以直接相加复数可以直接相乘复数可以直接点乘复数矢量可以直接叉乘```功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 Complex(16), dimension
题意:已知复数 X = XR + XIi 和 B = BR + BIi,X = a0 + a1B + a2B^2 + a3B^3 ....... anB^n,求满足一定条件的a0,a1,....an  思路分析:ai的范围很小,所以可以用dfs搜索解。对于X = a0 + a1B + a2B^2 + a3B^3 ....... anB^n,每次X - ai,之后X/B,这里用到了复数的 除法 ,如果
Fortran 90中,关系 运算符 大于和小于分别用 ">" 和 "<" 表示。这两个 运算符 用于比较两个操作数的大小关系。当操作数为不同类型时,编译系统会将它们转换为同一类型后进行比较。一般情况下,较低类型的操作数会被转换为较高类型的操作数进行比较。类型的级别从高到低一般为复型、实型和整型。 #### 引用[.reference_title] - *1* [ FORTRAN 学习笔记:算术 运算符 和表达式](https://blog.csdn.net/Dianhui_Bi/article/details/123179572)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]