C++ 传递一个 int,错误地说这是一个双精度
C++ Passing An Int, Error Saying It's A Double
我目前正在进行一项任务,我们正在使用c++制作一个汇编程序。当输入数字时,我已经让代码进行了区分,并试图让程序将16位数组中的相关位更改为所需的二进制数。
问题是,在计算幂之后,输入数的余数和超过它的第一次幂被分配给int,但将其传递回dec_to_bin(),我得到了以下错误。
assembly.cpp:在函数"void dec_to_bin(int,int*)"中:汇编器.cpp:135:32:错误:从"double(*)(double,double)throw()"到"int"的转换无效[-fpermission]dec_to_bin(余数,指针);
//*pointer points to an array[16]
void dec_to_bin(int num, int *pointer)
{
//Base cases
if(num == 2)
{
pointer[14] = 1;
return;
}
else if(num == 1)
{
pointer[15] = 1;
return;
}
else
{
int power = 0;
//power function outlined below. The inbuilt pow(a, b) returns a
//double and gave the same problem, so I tried this instead.
while(PowerFunc(2, power) < num)
{
power++;
}
//Problem arises here. remainder is assigned as an int
//Using typeinfo shows it as an int, yet passing it a few lines
//down gives the quoted error.
int remainder = PowerFunc(2, power)-num;
pointer[16-power] = 1;
}
if(remainder == 0)
{
return;
}
else
{
//Line that throws the error. Saying remainder is a double.
dec_to_bin(remainder, pointer);
}
}
//Power function to replace pow(a, b). Not ideal but it works.
int PowerFunc(int number, int powernum)
{
if(powernum == 0)
{
return 1;
}
else if(powernum == 1)
{
return number;
}
else
{
return number * PowerFunc(number, powernum-1);
}
}
老实说,这让我很为难。起初,我认为使用pow(a,b)并将其分配给int只会拼接掉小数部分,但即使制作自己的幂函数,也仍然告诉我我的int是双精度的。
行
int remainder = PowerFunc(2, power)-num;
出现在else
下由大括号分隔的块之间,因此remainder
变量的范围仅向下延伸一行。中的remainder
if(remainder == 0)
和
dec_to_bin(remainder, pointer);
是另一个实体,巧合的是具有相同的名称。你可以通过将你的remainder
重命名为其他任何东西来验证,比如myremainder
。。。
其他注意事项:
考虑用if(powernum <= 0)
替换if(powernum == 0)
——这将在负指数的情况下节省大量计算。
我还建议替换递归
return number * PowerFunc(number, powernum-1);
带迭代:
int result = 1;
while(powernum-- >= 0)
result *= number;
return result;
很容易,remainder
也是在其他地方声明的函数,编译器抱怨dec_to_bin
将double
作为其第一个参数,而不是指向double (*)(double, double)
类型函数的指针。
在调用dec_to_bin(remainder, pointer);
时,在else
作用域中声明的变量remainder
不可见。
您的if(remainder == 0)
也有问题,因为它的计算结果总是为false。
- 将双精度变量设置为另一个变量的值
- 我在C++中使用提升哈希函数将 3 个双精度组合成一个面临冲突的哈希
- 为什么 Clang std::ostream 写一个 std::istream 无法读取的双精度?
- Fmod 函数清楚地输出一个预期的双精度值,但 if(fmod == 预期的双精度值)的计算结果不是 true
- C++ 警告:在一个声明中将截断从双精度初始化为浮点数,但在另一个声明中则不初始化
- 字符串和双精度的麻烦,等值后再得到一个数字
- 我想读取文本文件中的所有内容(但文本文件中只有一个双精度值),转换为双精度值并返回值
- 在编译时将整数和分数部分宏组合成一个新的宏或双精度
- 将 32 位浮点数和不强制转换的 32 位整数与双精度进行比较,当其中一个值可能太大而无法完全适合另一种类型时
- 有没有办法构造一个 constexpr 函数来获取双精度的位表示
- C++ 传递一个 int,错误地说这是一个双精度
- 在C++中获取大于或等于一个双精度的最小浮点值(以及小于或等于一的最大浮点值)
- 在字符串(C++)的末尾添加一个双精度
- C++试图返回一个双精度数组的字符串(有点)
- 如何找到最近的下一个/上一个双精度值(给定数字的numeric_limits::epsilon)
- C++函数在一个双精度数组中查找最大值
- 两个整型到一个双精度c++
- 如何用代数工具创建一个双精度矩阵
- 当我从函数返回一个双精度值时,它变成了一个整数
- 在程序中稍后传递一个双精度-使用对话框进行输入