プロが教えるわが家の防犯対策術!

ある数値を仮数部と指数部に分けたいのですが、どうすればよいでしょうか。

frexp()という関数を見つけたのですが、これはある数nを

n = x * 2^p
に分解する関数なのです。

n = x * 10^p
に分解する関数はありますか。それともfrexp()を使って目的を果たせるでしょうか。

sprintf()を用いれば、指数形式に変換すれば出来るのですが、もっとスマートな方法があれば良いなと思い、質問させていただきました。

どうぞよろしくお願いします。

A 回答 (1件)

サンプルを作ってみました。


お考えにそぐわないところがあれば、ご自由に手を加えてください。

#include <stdio.h>
#include <math.h>

void getMantissaAndExponent(double num, double *man, int *exp)
{
  double log = log10(num);
  
  *exp = log;
  *man = pow(10.0, log - *exp);
}

int main(void)
{
  double n, m;
  int e, i;
  
  for (n = 1.2345, i = 0; i < 10; n *= 10, i++) {
    getMantissaAndExponent(n, &m, &e);
    printf("%g = %f * 10^%d\n", n, m, e);
  }
  
  for (n = 0.12345, i = 0; i < 10; n /= 10, i++) {
    getMantissaAndExponent(n, &m, &e);
    printf("%g = %f * 10^%d\n", n, m, e);
  }
  return 0;
}

(注)インデントのため、全角空白を使っています。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
logの計算結果は、整数部が指数、小数部が仮数をあらわしているのですね。
大変参考になりました。

お礼日時:2007/06/02 14:10

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


このQ&Aを見た人がよく見るQ&A