如何将复数的虚部设置为零?

2023-12-03

我需要检查虚部是否非常小,如果是,则将其设置为零,以便消除一些浮点错误,这些错误会导致在应该为零的情况下产生非常小的非零虚部。

我的代码如下:

kz2 = SQRT((n2*(2.0*PI*eta))**2 - kxarray(p)**2)
kz1 = SQRT((n1*(2.0*PI*eta))**2 - kxarray(p)**2)

if (aimag(kz2) < 0.0005) then
    kz2 = (REAL(kz2),0.0)
end if

if (aimag(kz1) < 0.0005) then
    kz1 = (REAL(kz1), 0.0)
end if

不幸的是编译器只返回:

gaussian1.f90:122.18:

kz2 = (REAL(kz2),0.0)
                1
Error: Expected a right parenthesis in expression at (1)

gaussian1.f90:126.18:

kz1 = (REAL(kz1), 0.0)
                1
Error: Expected a right parenthesis in expression at (1)

任何建议将不胜感激 - 我是否以正确的方式解决这个问题?

更新:我设法通过使用以下方法避免了这个问题:

if (aimag(kz2) < 0.0005) then
    kz2 = real(kz2)
end if

if (aimag(kz1) < 0.0005) then
    kz1 = real(kz1)
end if

但是,如果我想将虚部设置为非零值,该怎么办?


Fortran 2008 中还有更多的可能性。您可以将实部和虚部作为派生类型组件访问,例如

   a = c%re
   b%im = 5

因此,要设置z在新的编译器中为零,你可以尝试z%im = 0 .

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将复数的虚部设置为零? 的相关文章

  • 将嵌套循环计算转换为 Numpy 以加速

    我的Python程序的一部分包含以下代码段 其中一个新的网格 是根据旧网格中找到的数据计算的 网格是二维浮点数列表 该代码使用了三个 for 循环 for t in xrange 0 t step for h in xrange 1 hei
  • 尝试读取名单后返回的状态不是预期的

    我想从文件中读取名单 但在名单不存在的情况下实现捕获选项 从我读到的here http msg ucsf edu local programs IBM Compilers Fortran html pgs lr76 htm我期望状态为 84
  • R:使用带有 .Call 和 C/C++ 包装器的 Fortran 子例程而不是 .Fortran 的优点?

    我有一个 R 包 它使用大量 Fortran 子例程来进行递归线性代数计算的嵌套循环 很大程度上依赖于 BLAS 和 LAPACK 例程 作为 Fortran 的接口 我使用 Fortran功能 我刚刚读过乔纳森卡拉汉的博客文章 http
  • AXI4 流接口:如何在 HLS 中管理浮点数组以生成硬件加速器并在 RTL 项目中安全地连接它们?

    最后 我想做的是使用 Vivado Design Suite 中具有单精度浮点数组的流接口来构建硬件加速器 HLS 用户指南UG902 http www xilinx com support documentation sw manuals
  • 张量流中的复杂卷积

    我正在尝试运行一个简单的卷积 但包含复数 r np random random 1 10 10 10 i np random random 1 10 10 10 x tf complex r i conv layer tf layers c
  • 为什么 printf 使用浮点和整数格式说明符打印随机值

    我在64位机器上写了一个简单的代码 int main printf d 2 443 所以 这就是编译器的行为方式 它将识别第二个参数为双精度型 因此它将在堆栈上压入 8 个字节 或者可能只是在调用之间使用寄存器来访问变量 d需要 4 字节整
  • gfortran 支持尾调用消除吗?

    我编写了这个小程序来测试 gfortran 是否执行尾调用消除 program tailrec implicit none print tailrecsum 5 0 contains recursive function tailrecsu
  • 查找公因数以将浮点数列表转换为整数列表

    我有一个来自其他函数的浮点数列表 我所知道的是 在理想世界中存在一个共同因素 可用于将每一项相乘以获得整数列表 可能存在一些小的数值噪声 1e 14 例如 2 3333333333333335 4 666666666666667 1 0 1
  • 将 int 和 const int 转换为 float 时的不同结果

    谁能解释为什么 int 和 const int 给出不同的结果 转换为 float 并用于浮点数学时的结果 参见 例如这段代码 int tmain int argc TCHAR argv int x 1000 const int y 100
  • 在没有 epsilon 的情况下可以将浮点数与 0.0 进行比较吗?

    我知道 要比较两个浮点值 需要使用一些 epsilon 精度 因为它们并不精确 但是 我想知道是否存在边缘情况 我不需要那个 epsilon 特别是 我想知道这样做是否总是安全的 double foo double x if x lt 0
  • 使用 Fortran 进行数组问题的二分查找

    我正在使用 Schaum 的 Fortran 77 编程概要 一书 其中有一个关于使用括号值组方法进行二分搜索的示例 首先这是代码 INTEGER X 100 INTEGER RANGE INTEGER START FINISH PRINT
  • GO TO 语句 - Fortran 到 Matlab

    我一直在努力将此网格搜索代码从 Fortran 转换为 Matlab 但是我无法正确合并 GO TO 语句 我正在尝试使用 while 循环 但我认为我需要其他东西来结束搜索 任何帮助将不胜感激 vmax 1 0E 15 amax G 1
  • 如何指定 set precision 舍入

    当流到 std 输出时 我可以指定 set precision 对双精度值进行舍入吗 ofile lt lt std setprecision 12 lt lt total run time TIME lt lt n Output 0 75
  • Fortran 递归分段错误

    我必须设计并实现一个 Fortran 例程来确定方格上簇的大小 并且递归地编写子例程似乎非常方便 然而 每当我的晶格大小超过某个值 大约 200 边 时 子例程就会始终出现段错误 这是我的集群检测例程 RECURSIVE SUBROUTIN
  • 为什么多次相加0.1仍然无损?

    我知道0 1十进制数不能用有限的二进制数精确表示 解释 http www exploringbinary com why 0 point 1 does not exist in floating point so double n 0 1会
  • 为什么“dtoa.c”包含这么多代码?

    我将是第一个承认我对低级编程的整体知识有点稀疏的人 我理解许多核心概念 但我不经常使用它们 话虽这么说 我对需要多少代码感到非常惊讶dtoa c http www netlib org fp dtoa c 在过去的几个月里 我一直致力于用
  • 这些双精度值如何精确到小数点后 20 位?

    当精度是一个问题时 我正在测试一些非常简单的等价错误 并希望以扩展双精度执行操作 这样我就知道答案在 19位数字中 然后以双精度执行相同的操作 其中第 16 位会有舍入误差 但不知何故 我的双精度算术保持了 19 位精度 当我在扩展双精度中
  • Fortran 意图(inout)与省略意图

    良好的实践表明 Fortran 中的子例程参数每个都应具有指定的意图 即intent in intent out or intent inout 如上所述这个问题 https stackoverflow com questions 1011
  • 是否有一个函数可以检索某个范围内可用的不同值的数量?

    我正在制作的应用程序中使用双精度浮点变量 我标准化了一些值范围 从 例如 我有很多范围 48 0 to 48 0 to 0 0 to 1 0 使用这个简单的函数 double ToNormalizedParam double nonNorm
  • 如何检测跨平台浮点行为的差异

    我可以执行哪些检查来确定两个硬件平台的浮点行为有何差异 验证 IEEE 754 合规性或检查已知错误可能就足够了 以解释我观察到的输出差异 我通过 proc cpu 查看了 CPU 标志 两者都声称支持 SSE2 我在看 https www

随机推荐

  • 是否可以按照指定的顺序查询帖子?

    我有一个名为的自定义字段type 这是一个 单选按钮 数据类型 它有一些选择 此自定义字段被分配给名为的自定义帖子类型pproduct 例如 以下是此自定义字段的选择 RED BLUE YELLOW WHITE BLACK 以上只能选择一项
  • 在变量类型VHDL中添加2个std_logic_vector

    我正在参与这个学校项目 我有两个 std logic vector 31 downto 0 A 和 B 并且我有一个变量类型 std logic vector 32 downto 0 我想添加 A B 并将结果放入 32 位的 std lo
  • Prolog:在Prolog中定义逻辑运算符作为其他运算符的占位符

    我的目标是在序言中写一个小证明助手 我的第一步是定义逻辑连接词 如下所示 op 800 fx op 801 xfy op 802 xfy v op 803 xfy gt op 804 xfy lt gt op 800 xfy 最后一个运算符
  • Ember.js:具有动态绑定的 TextField

    我想将 TextField 绑定到由字符串变量指定的属性 请参阅编辑以获得更好的解释 如这个问题 不幸的是 那里给出的答案不再有效 他们在那里使用以下视图 App AutoTextField Ember ContainerView exte
  • 如何从流中删除转义序列

    有没有一种快速的方法来查找 并删除 所有转义序列来自流 字符串 希望以下语法对您有所帮助 string inputString hello world StringBuilder sb new StringBuilder string pa
  • 为 NavigableMap 编写同步线程安全包装器

    java util Collections目前提供以下实用方法来创建synchronized各种集合接口的包装器 synchronizedCollection Collection
  • javascript 中关联 []、{} 和对象之间的区别[重复]

    这个问题在这里已经有答案了 可能的重复 数组和对象有什么区别 该项目存在于数组中 但它说数组长度为 0 我对 javascript 中的对象和关联数组有点困惑 我读到了这个 question但这个问题表明两者没有太大区别 我在控制台中写了这
  • git - 当本地被删除但文件存在于远程时​​合并冲突

    我对 git 很陌生 想知道应该如何进行合并 在本地存储库中我删除了 master 分支上的几个文件 但这些文件存在于远程 master 分支中 执行 git merge 后 它会显示已发生的冲突 使用git gui显示本地文件被删除 而远
  • 错误:双端队列迭代器不可取消引用

    我正在尝试创建一个程序 将算术表达式从中缀形式转换为后缀形式 只要我不调用 infixToPostFix 函数 程序就可以正常运行 但是当我尝试运行以下代码时 出现崩溃并出现错误 双端队列迭代器不可取消引用 我找不到任何解引用运算符 所以我
  • 无法在 MacOS 上从 shm_open 写入 fd

    我正在尝试写入然后从使用打开的文件描述符中读取shm open 它在 Linux 上按我的预期工作 但在 macOS 上却不行 特别是 macOS Monterey 12 5 21G72 这是代码 include
  • 如何让printf在STM32F103上工作?

    我是 STM32F103 世界的新手 我有一个STM32F103的演示代码 我正在使用arm none eabi来编译它 我尝试了在谷歌上可以找到的内容 但到目前为止没有任何效果 我已经花了三天时间来解决这个问题 任何人都可以给我一个运行良
  • 如何使用 pyodide 在项目中导入模块而不出现错误?

    每当我在 pyodide 中导入 python 模块时 都会出现此错误 pyodide js 108 Invalid package name or URI 我不确定如何正确导入模块 我已经尝试过文档中提到的这个 pyodide loadP
  • 为什么我们不能对 float 和 double 数据类型使用按位运算符

    我是 c 的新手 在这里我试图以存储在内存中的方式打印存储在 float 和 double 变量中的值 但编译器不允许我在浮点和双精度变量上使用按位运算符 我想知道为什么我们不能使用像 和 这样的按位运算符float 和 double 数据
  • 添加到

    内的每个单词

    我想将 添加到 内的每个单词 该链接应该包含它所包围的单词 该网页有许多不同的 h3 h3 add links h3 h3 to each word h3 结果应该是这样的 h3 a href add add a a href links

  • 如何使用ffmpeg的库将YUV420P图像转换为JPEG?

    我正在尝试转换 YUV420P 图像 AV PIX FMT YUV420P 使用 ffmpeg 转换为 JPEGlibavformat and libavcodec 到目前为止 这是我的代码 AVFormatContext pFormatC
  • 重复多个函数参数

    Typescript 中有没有一种方法可以动态输入默认情况下采用 2 个参数但应该能够重复处理这些参数的函数 should be allowed myFunction paramA paramB myFunction paramA para
  • .NET - 将通用集合转换为数据表

    我正在尝试将通用集合 列表 转换为数据表 我发现以下代码可以帮助我做到这一点 Sorry about indentation public class CollectionHelper private CollectionHelper th
  • 如何在触发器函数中将 NEW.* 传递给 EXECUTE

    我有一个简单的任务是将巨大的 MD5 值插入到表 分区表 中 并创建了一个触发器和一个触发器函数来代替INSERT手术 在函数中我检查了前两个字符NEW md5以确定应插入哪个表 DECLARE tb text BEGIN IF TG OP
  • NoSuchMethodError:Lcom/google/firebase/FirebaseApp 类中没有虚拟方法 zzEq()Z;

    以下是我的应用程序上不断出现的致命错误 我正在尝试使用 Firebase 在我的应用程序上运行聊天信使功能 它正在运行 但此后它一直使应用程序完全崩溃 我对代码进行了一些编辑 希望能解决问题 但没有成功 我一直在 youtube 上关注这个
  • 如何将复数的虚部设置为零?

    我需要检查虚部是否非常小 如果是 则将其设置为零 以便消除一些浮点错误 这些错误会导致在应该为零的情况下产生非常小的非零虚部 我的代码如下 kz2 SQRT n2 2 0 PI eta 2 kxarray p 2 kz1 SQRT n1 2