表紙
/
自作ソフト
/
日記
/
宝箱
/
サイト情報
/
検索
一般 / 新C言語 / 駄文 |
| |
|
|
6.1 _Complex 型 _Complex 型は規格を満たしている C 言語処理系であるならいつでも使える型で(ただし freestanding 用の実装は除く)、実際は次の型の総称です。 float _Complex / double _Complex / long double _Complex さて、複素数は実数部(real part)と虚数部(imaginary part)の二つの部分からなっています。したがって、これを計算機で扱うためには、実数部と虚数部にそれぞれ浮動小数点型を割り当てて、実数部と虚数部をまとめて管理するのが最も簡潔な方法です。各型の _Complex の前についている浮動小数点型がその各部の実際の型を表しています。例えば、double _Complex 型なら、実数部は double 型、虚数部も double 型です。 実数部と虚数部の管理の方法も決まっています。二つの要素を持った実数型の align された配列として管理します。始めの要素が実数部、残りが虚数部を示しています。例えば、double _Complex 型なら、typedef struct { double c[2]; } double_Complex; で、double_Complex dc; の時、dc.c[0] が実数部、dc.c[1] が虚数部ということです(実際は dc.c[1] の様にはアクセスできません)。 次にキャストについて説明します。浮動小数点数を _Complex 型にキャストする場合には、_Complex 型の実数部がその浮動小数点数に、虚数部が 0 になります。また _Complex 型の変数を浮動小数点型にキャストする場合には、_Complex 型の変数の虚数部が捨てられて、実数部が取り出されます。 6.2 _Imaginary 型 _Imaginary 型は、複素数における虚数部の値を示すための型で、マクロ __STD_IEC_559_COMPLEX__ が定義されている環境だけで使用することができます。このマクロは _Imaginary 型の仕様が informative な仕様 (Annex G) であることを認識する必要から存在しています。 _Imaginary 型も _Complex 型と同様に次に示す型の総称です。 float _Imaginary, double _Imaginary, long double _Imaginary 意味も _Complex 型と同様に、_Imaginary の前のそれぞれが複素数の虚数部の実際の数値の型を示しており、その型の表現はその浮動小数点型と同一です。例えば、double _Imaginary なら、その実際の型の構造は double 型と同一です。 次にキャストについて説明します。まず、浮動小数点数を _Imaginary にキャストすると、それは (_Imaginary)+0.0 という値になります。また、_Imaginary 型の値を浮動小数点型にキャストすると、その値は +0.0 になります。ただし、_Imaginary 型を _Bool 型にキャストする場合、(_Imaginary)0 の場合にのみ 0 にキャストされます。それ以外の場合は 1 になります。_Imaginary 型の値を _Complex 型にキャストする場合には、変換後の _Complex の実数部は +0.0、虚数部はその _Imaginary 型の値になります。そして、_Complex 型の値を _Imaginary 型にキャストする場合、_Complex 型の実数部は捨てられ、虚数部がその結果として残ります。 6.3 複素数に関する四則演算 複素数に関する四則演算について以下に示します。ただし、実数型とあるのは、float, double, long double 型のことを指しています。また、灰色の部分の計算を行おうとすると、例外が発生するかも知れません。ただし、complex.h を include して #pragma STDC CX_LIMITED_RANGE を on にすると灰色の部分の例外が発生しなくなります。デフォルトは off なので例外が発生するようになっています。 ...と仕様で言っているのではないかと...。
|
|
| ||||
表紙
-
著作権
-
注意事項
-
リンクについて
-
404 エラーについて
(c)1999-2014 seclan. All rights reserved. |