floating-point - 复杂的浮点类型

标签 floating-point numerical-methods

为了好玩,我正在实现我自己的编程语言,并且一直在尝试各种浮点数字类型的实现。我想考虑实现一个数字类型来表示复数。
i)我一直在阅读,我的理解是没有与 IEEE-754 标准(定义实数的标准浮点表示)等效的复数。 这是正确的,还是我错过了什么?
ii) 我知道的所有编程语言都通过存储一对(单精度或 double )浮点数来实现复杂类型,这些浮点数表示复数 $x + iy$ 的笛卡尔形式。 有没有人知道一种以不同方式做事的编程语言?
我想考虑实现以极坐标形式 $re^{i\theta}$ 表示复数的数字类型,将 $r$ 存储为无符号浮点数,将 $\theta$ 存储为无符号定点数在 0 和 1 之间。这将是一件非常不标准的事情(但请记住,我只是为了好玩而编写我的编程语言)。据我所知,有 very few使用无符号浮点数的设置,但感觉这对它们来说是合适的。我希望 $\theta$ 存储为定点,以便在原点周围均匀分布。
有没有人知道针对这种选择的数值结果所做的任何工作?例如:在典型的数学工作流程中,复数的加法与乘法的相对重要性是什么(笛卡尔形式的加法更容易,极坐标形式的乘法更容易)?就数值精度和准确度而言,选择极坐标表示法的含义是什么? 有没有任何人可以指点我的引用资料?
注意 - 请注意,我对这些数字类型是否存在任何硬件支持不感兴趣。因为我做我的语言是为了好玩,所以我很高兴在软件中做一些事情作为学习练习。
最后 - 有没有人对 Inf 的复杂等价物有什么建议?应该表现?

最佳答案

需要记住的一件事是,虽然极坐标表示中的乘法在某种程度上比笛卡尔坐标中的乘法快,但比笛卡尔坐标中的加法慢很多。在 C 中,通过编译 -O3 的代码,我认为极坐标中的加法比笛卡尔函数中的加法慢约 250 倍。这是因为要进行加法,您必须首先转换为笛卡尔,这是对 sin() 和 cos() 的两次调用,然后加法然后转换回极坐标,这是对 hypot(或至少是 sqrt)的调用和 atan2。
至于各种操作使用了多少,就很难确定了。如果您要进行矩阵和向量运算(并且复杂矩阵在物理学和电气工程中很常见),那么我猜加法和乘法的输入大致相同。

关于floating-point - 复杂的浮点类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67978116/

相关文章:

math - 在 Mathematica 中求解非线性方程组

python - 生成 2 的平方根的数字

matrix - 仅一行不同的增量最小二乘法

java - 如何打印精确的浮点 double 值

C++17 十六进制浮点文字单精度后缀冲突?

python - 使用newon方法时是否有检查收敛性的方法?

c++ - 为带有移位参数的不同函数编写模板

将大整数转换为 float

objective-c - 在 objective-c 中:按原样打印浮点

c++ - 如何实现double的序列化和反序列化?