|
>浮動小数点の演算方法について質問があります。
>(ANSI準拠の関数なのでOSなどの環境は意識していません)
>
>OS、コンパイラに依存しない「ANSI準拠」の関数などを使用し、
>浮動小数点の変数(double型)に設定されている値より、
>指定されたビット数目から指定された桁だけ値を抽出したい場合、
>どのような方法で実現すれば良いのでしょうか?
>
こう考える時点で、環境依存になってしまっています。
>イメージ(具体例)としては、
>浮動小数点の変数に設定されている値を1000とした場合
>1000を2進数であらわすと「1111101000」ですが
>変数に設定された値の6ビット目から3つを抽出するのであれば、101
>3ビット目から3つを抽出するのであれば、000
>10ビット目から10と指定があれば、1111101000
>のように値を抽出したいです。
>
>math.hに以下の関数があるのですが、求まれる仮数部が
>0.5 以上、1.0 未満で表現されているため、
>整数のように指定ビットから指定した数を抽出できません。
>
>double frexp(
> double x,
> int *expptr );
>
>また、実際作成したいプログラムではlongなどでは表現できない
>桁が多きい「整数」を処理したいと考えています。
>(そのため、浮動小数点の変数を使用してます)
環境によっては、long long 型がサポートされています。
確認してみて下さい。
私の環境(FC4、gcc4、Pen4)での、各型のサイズ(バイト)
char: 1
short int: 2
int: 4
long int: 4
u_long: 4
long long int: 8
size_t: 4
ssize_t: 4
double: 8
long double: 16
>浮動小数点変数のメモリ配置を意識し、指数部と仮数部を
>直接抽出すれば、可能かと思いますが、
>標準の関数などを使用して求める方法は無いのでしょうか?
>
>宜しくお願いします。
long long が無い、long longでもオバーフローするのであれば、
多倍長演算ライブラリを探す、または、簡単に、これが使える言語を使う。
(python,scheme,Ruby ,Perl?)
のが良いかと思われます。
|