• ベストアンサー

数値を指数部と仮数部に分離したい

ある数値を仮数部と指数部に分けたいのですが、どうすればよいでしょうか。 frexp()という関数を見つけたのですが、これはある数nを n = x * 2^p に分解する関数なのです。 n = x * 10^p に分解する関数はありますか。それともfrexp()を使って目的を果たせるでしょうか。 sprintf()を用いれば、指数形式に変換すれば出来るのですが、もっとスマートな方法があれば良いなと思い、質問させていただきました。 どうぞよろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • asuncion
  • ベストアンサー率33% (2127/6290)
回答No.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; } (注)インデントのため、全角空白を使っています。

noname#105136
質問者

お礼

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

すると、全ての回答が全文表示されます。

関連するQ&A