-1

浮動小数点数をポイントの 2 つの部分 (前後) に分割する数学的またはアルゴリズム的な方法はありますか?

例:

number=456.789
before=456
after=0.789

任意のプログラミング言語でこれを実行できるため、コードは必要ありません。できれば算術演算子やその他の演算子を使用する汎用アルゴリズムが必要です。

4

2 に答える 2

4

それはすべて、浮動小数点値で使用できる操作によって異なります。

  • 持っている場合はfloorceilそれらのいずれかを使用して整数部分を取得し、減算を使用して小数部分を取得できます。
  • 剰余の除算がある場合は、それを行うことができます (除数として 1 を使用)。
  • 値のビット単位の表現を調べることができ、どのビットが指数と仮数であるかを知ることができれば、それを使用できます。
  • 値を 10 進文字列として表示できる場合は、小数点記号 (通常は.または,) で分割できますが、科学表記法を使用するには追加の作業が必要になります。
  • 比較、加算、減算しかない場合は、整数部分のバイナリ検索を実行できます。一連の指数関数的に増加する推測によって開始境界を確立します。これは、順序付けられた加法群の基本的な数学的操作のみを想定しているという意味で、おそらく最も「一般的」です (必要に応じて乗算または除算を回避できるため)。しかし、より効率的な方法を提供しない、浮動小数点を使用する本格的なプログラミング言語があるとは考えられません。
于 2013-04-16T12:33:44.260 に答える
1

私は通常、あなたが求めるものを得るために次のことを行います:

double number=456.789;
int before= number; //This type cast is equivalent to floor(number) 
double after=number-before;

したがって、指定された浮動小数点数のフロアを取得することが、実行する主なタスクです。ここで、フロア メソッドは、入力数値以下の最大の整数を返すだけです。これはおそらく、いくつかの言語レベルの操作でメモリ内の浮動小数点表現を利用することによって行われます (浮動小数点数は定義されていないため、通常のビット操作は実行できません)。したがって、floor/type-cast を使用したくない場合は、基本的に運命づけられています。

于 2013-04-16T14:56:33.140 に答える