不必要に車輪を再発明したくありませんが、strtod の機能を探していますが、基本パラメーター (2,8,10,16) を使用しています。(strtoul が基本パラメーターを許可することは知っていますが、戻り値の型 double を探しています)。正しい方向へのアドバイス/指針はありますか? ありがとう。
2 に答える
2
任意の基数の場合、これは難しい問題ですが、基数が 2 のべき乗である限り、単純なナイーブ アルゴリズムは問題なく機能します。
strtod(C99) は、C 言語の 16 進浮動小数点定数と同じ形式で 16 進浮動小数点をサポートします。0xプレフィックスが必要でp、指数を区切ります。指数は基数 10 で、2 の累乗を表します。C99 以前のライブラリをサポートする必要がある場合、そのような運はありません。しかし、ベース 2/4/8 も必要なので、とにかく自分でロールするのがおそらく最善です。
編集:単純なアルゴリズムの概要:
- 0 に初期化された浮動小数点アキュムレータ変数 (
doubleまたは好みに応じて何でも) から始めます。 - 処理する文字ごとに、左端の数字から基数ポイントまで、アキュムレータに基数を掛けて、文字の値を数字として加算します。
- 基数ポイントの後、最初は 1/base である、新しい実行中のプレース値変数を開始します。処理する文字ごとに、桁の値に桁の値の変数を掛けた値を加算し、桁の値の変数を基数で割ります。
- 指数文字が表示された場合は、それに続く数値を整数として読み取り、標準ライブラリ関数の 1 つを使用して、浮動小数点数を 2 のべき乗でスケーリングします。
桁数が多すぎる可能性のある四捨五入フォームを処理したい場合は、ステップ 2 または 3 で重要な桁数を超えたら、そのロジックを解決する必要があります。それ以外の場合は、それを無視できます。
于 2011-02-10T21:07:22.590 に答える
0
ありそうもない - 私は浮動小数点数が他の基数で「10 進数」としてコード化されているのを見たことがありません。
于 2011-02-10T21:02:06.470 に答える