【问题标题】:Multiplying and Dividing two floating point numbers without using * and / operators不使用 * 和 / 运算符将两个浮点数相乘和相除
【发布时间】:2019-09-11 14:20:57
【问题描述】:

我正在尝试解决如何在不使用 * 和 / 运算符的情况下将两个数字相乘和相除

我尝试使用 for 循环:

for(int a = 1; a<=secondnum; a++)
{
    total = firstnum + total;
}
cout << "Total: " << total;
     
for(b = firstnum; b>=secondnum; b = b-secondnum)
{
    total = total + 1;
}
cout << "Answer: " << total;

但是这只适用于整数...有没有办法让它适用于浮点值?

【问题讨论】:

  • 这似乎非常不切实际。你想完成什么?
  • 要进行浮点数的乘法运算,您需要学习如何在不使用除法运算符的情况下进行除法运算。从那开始。
  • @Blaze 显然这是一种练习(自己造成的或给予的)。无需问为什么,就可以从表面上回答问题。
  • 您可能想研究位移。

标签: c++


【解决方案1】:

在过去(在袖珍计算器等之前),对数表用于将乘法和除法转换为加减法:

#include <cmath>

double Mult(double a, double b)
{
  return exp(log(a)+log(b));
}
double Div(double a, double b)
{
  return exp(log(a)-log(b));
}

请注意,这仅适用于正数,但使用绝对值并为结果赋予正确的符号相对容易。

【讨论】:

    【解决方案2】:

    我实际上是在高中时这样做的。我写了一个程序,可以将两个任意长的浮点数相乘或相除。基本上,我的做法与我通过长乘法/除法完成的方式完全相同。

    我将这两个值都保存在十进制数字数组中。

    char firstValue[1024];
    char secondValue[1024];
    

    我不记得我是把它们保存为 ASCII 还是转换它们。毕竟是 40 年前的事了。

    然后我把它写在纸上。乘法并不难,尽管我承认我使用 * 运算符将两个一位数的值相乘。但是你可以实现一个 integerMultiply 方法。

    如果你能在纸上长期完成,你可以为它写一个算法。但是这里的答案太长了。

    【讨论】:

      猜你喜欢
      • 2019-06-01
      • 2011-05-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-22
      • 2022-01-04
      • 2017-07-21
      • 2018-05-10
      相关资源
      最近更新 更多