-1

是否有任何数学或算法方法将浮点数分成两部分(之前和之后)点。

例子:

number=456.789
before=456
after=0.789

我不想要任何代码,因为我可以用任何编程语言做到这一点。我想要一个通用算法,最好使用算术或其他此类运算符。

4

2 回答 2

4

这一切都取决于对浮点值可用的操作:

  • 如果你有floorceil那么你可以使用其中之一来获得整数部分,并使用减法来获得小数部分。
  • 如果你有除数,你可以这样做(使用 1 作为除数)。
  • 如果您可以检查值的按位表示,知道哪些位是指数和尾数,那么您可以使用它。
  • 如果您可以将值视为十进制字符串,则可以在小数分隔符处拆分(通常为.,),尽管科学记数法需要额外的工作来处理。
  • 如果你只有比较、加法和减法,那么你可以对整数部分进行二进制搜索——通过一系列指数增长的猜测来建立起始界限。这可能是最“通用”的,因为它只假设有序加法组的基本数学运算(因为如果你愿意,你可以避免乘法或除法)。但是很难想象会有一种严肃的浮点编程语言不提供更有效的方法。
于 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 方法只返回不大于输入数的最大整数。这很可能通过利用内存中的浮点表示和一些语言级别的操作来完成(您不能在浮点数中执行正常的按位运算,因为它没有定义)。所以AFAIU,如果你不想使用地板/打字,你基本上注定要失败。

于 2013-04-16T14:56:33.140 回答