如何在C语言中有效地处理复数?
如何在C语言中有效地处理复数 我们有3种选择:如何在C语言中有效地处理复数?,c,c99,complex-numbers,C,C99,Complex Numbers,如何在C语言中有效地处理复数 我们有3种选择: 使用结构并按值将其传递给函数: 但通过这种方式,我们有3次复制结构的值(两个参数和一个返回)。ComplexDouble的大小是16字节,因此我们需要复制3*16字节=48字节,这可能是不够的 将指针传递到结构: 在这个变体中,我们向结构传递3个指针,即3*8字节=24字节。也许这样更有效 使用C99标准库中的复杂类型: 但关于C99复杂类型,我有一些不明白的地方。double complex实际上是如何传递到函数中并从函数返回的?它是否像第一个带
ComplexDouble
的大小是16字节,因此我们需要复制3*16字节=48字节,这可能是不够的
double complex
实际上是如何传递到函数中并从函数返回的?它是否像第一个带有结构的变体一样按值复制
我应该使用哪种变体?使用它的标准版本。它现在集成到编译器中,是您能得到的最好的
How is double complex actually passed into function and returned from function?
它们可以通过值进行访问,正如函数的规范所指示的那样,并且与任何其他函数参数的情况一样,除非它们具有数组类型
保证复数与两个实数的向量具有相同的表示形式(=内存布局),但它们是正确的类型:
Each complex type has the same representation and alignment requirements as an array
type containing exactly two elements of the corresponding real type; the first element is
equal to the real part, and the second element to the imaginary part, of the complex
number.
尽管它们的字节模式与浮点值的两个元素向量相同,但它们与任何其他数字一样被视为算术类型。使用它的标准版本。它现在集成到编译器中,是您能得到的最好的
How is double complex actually passed into function and returned from function?
它们可以通过值进行访问,正如函数的规范所指示的那样,并且与任何其他函数参数的情况一样,除非它们具有数组类型
保证复数与两个实数的向量具有相同的表示形式(=内存布局),但它们是正确的类型:
Each complex type has the same representation and alignment requirements as an array
type containing exactly two elements of the corresponding real type; the first element is
equal to the real part, and the second element to the imaginary part, of the complex
number.
虽然它们的字节模式与浮点值的两元素向量相同,它们被视为与任何其他数字一样的算术类型。当所有符合标准的C实现中已经有一个实现时,为什么还要创建自己的实现呢?选项4)升级到C++选项4)通过传递
双复数*
组合选项2和3。Andrew Henle,我只是想了解C99标准数据类型“双复数”是如何实际实现的。为什么在所有符合标准的C实现中都有一个实现时,您还要创建自己的实现呢?选项4)升级到C++选项4)通过传递double complex*
组合选项2和3。Andrew Henle,我只是想了解C99标准数据类型“双复数”是如何实际实现的。C标准根本没有指定复数的表示形式。如果“双复数”是两个实数的向量,这是否意味着它是两个双复数的数组?但据我所知,数组是通过指针传递给函数的,而不是通过值。数组不能按值从函数返回。@Kostiantyn_Hermash它不是两个双精度数组,即使内存布局看起来像两个双精度数组。你的struct complex_double
的内存布局看起来也像两个double的数组…@IanAbbott,这完全是错误的。我为此添加了一条C标准的引文。@Kostiantyn_Hermash,在浮点的表示/和/存在/向量相同方面有细微的区别。请看我的编辑。C标准根本没有规定复数的表示。如果“双复数”是两个实数的向量,这是否意味着它是两个双复数的数组?但据我所知,数组是通过指针传递给函数的,而不是通过值。数组不能按值从函数返回。@Kostiantyn_Hermash它不是两个双精度数组,即使内存布局看起来像两个双精度数组。你的struct complex_double
的内存布局看起来也像两个double的数组…@IanAbbott,这完全是错误的。我为此添加了一条C标准的引文。@Kostiantyn_Hermash,在浮点的表示/和/存在/向量相同方面有细微的区别。请看我的编辑。
Each complex type has the same representation and alignment requirements as an array
type containing exactly two elements of the corresponding real type; the first element is
equal to the real part, and the second element to the imaginary part, of the complex
number.