C++ 在c+中不使用*运算符而乘以十进制值+;

C++ 在c+中不使用*运算符而乘以十进制值+;,c++,C++,我被要求在乘法中不使用*来创建计算器。计算器必须能加、减、乘十进制数值。我在乘法部分有问题。如果我乘以一个整数,我会得到正确的答案,但是如果我乘以一些十进制值,它会输出一个错误的答案。我想不出代码出了什么问题 #include "pch.h" #include <iostream> int main() { double num1 = 0, num2 = 0, product = 0, a = 0, b = 0, c = 0, answer = 0, fres = 0, d

我被要求在乘法中不使用*来创建计算器。计算器必须能加、减、乘十进制数值。我在乘法部分有问题。如果我乘以一个整数,我会得到正确的答案,但是如果我乘以一些十进制值,它会输出一个错误的答案。我想不出代码出了什么问题

#include "pch.h"
#include <iostream>

int main()
{
    double num1 = 0, num2 = 0, product = 0, a = 0, b = 0, c = 0, answer = 0, fres = 0, d = 0.01;

    std::cout << "\nEnter two values:\n";
    std::cin >> num1 >> num2;

    while (a < 100) {
        product = product + num2;
        a++;
    }

    while (b < product) {
        fres = fres + num1;
        b++;
    }

    while (c < fres) {
        answer = answer + d;
        c++;
    }
    std::cout << answer;
}

#包括“pch.h”
#包括
int main()
{
双num1=0,num2=0,乘积=0,a=0,b=0,c=0,答案=0,fres=0,d=0.01;
标准::cout>num1>>num2;
而(a<100){
产品=产品+num2;
a++;
}
while(bstd::cout主要问题是由于重复添加浮点类型可能会导致结果“走样”:例如,将0.1加十次,你自己看看。因此,循环停止后,你不必返回所获得的值;也许之前的值更接近你想要的结果。如果两个参数都是非整数的,那么乘法就成了一个公平的挑战,而我内心的魔鬼会寻找另一个选择,那就是l满足问题约束条件:

请注意,实现乘法的另一种方法是注意

a * b = std::exp(std::log(a) + std::log(b))


一个不那么滑稽的方法是使用基于平方指数的算法,除了你可以用加法代替乘法。

你可以删除几乎所有显示的代码,只保留案例3中的代码(当然还有所用变量的定义和初始化)您甚至可以对
num1
num2
的输入值进行硬编码,并创建一个非常简单的
main
函数,我们可以轻松地复制粘贴并自己尝试。我还建议您学习如何使用调试器逐个语句逐步执行代码语句,同时监视变量及其v值。通过这样的调试,您应该有可能自己解决问题。最后,解决问题的另一种方法是:如何使用笔和纸?将笔和纸的方式转换为代码非常简单。我还建议您使用字符串,因为这是必须的更简单的方法是逐位处理,计算每个数字的小数点后的小数位数(并填充数字,使它们在小数点前后具有相同的位数)。在二进制浮点运算中,100*a*b*0.01不一定等于a*b。确实很好!我只能想到一些指定精度(3,4,…小数)的循环。“基于平方指数的算法”它有各种各样的名字,包括;它只是一个二进制长乘法。@TobySpeight:绝对-这是非常有见地的。我已经找到了答案,请随意贡献。
a / b = std::exp(std::log(a) - std::log(b))