【问题标题】:Error: Invalid operands to binary expression double double, but I'm not using pointers, only using ints错误:二进制表达式双双的无效操作数,但我没有使用指针,只使用整数
【发布时间】:2014-08-08 02:45:44
【问题描述】:

从这里和谷歌,我认为“二进制表达式双精度和双精度的无效操作数”错误意味着我试图在不允许的情况下(由于某种原因)对双精度或浮点数进行操作,或者我在搞乱指针(我还没有完全弄清楚)。然而,我把这里的一切都用整数(我认为)进行了,而且我没有使用指针(我知道)。

我只是想尝试绘制不同的方程式,我不太确定发生了什么。我想使用浮点数,所以我可以看到小数,但我将所有内容都简化为整数,拼命地尝试得到我认为可以运行的简单程序。

我在这里缺少什么?

#include <stdio.h>

int pricedecrease(int x)
{
    return x - ((0.1 * x) ^ 3);
}

int main(void)
{
    printf("%d", pricedecrease(100));
}

【问题讨论】:

  • ^ 3 应该做什么? ^ 在 C 中是异或。
  • 应该是3次方……对吧?
  • ^ 是 C 中的按位运算符。有关更多信息,请参阅@FatalError 的答案。

标签: c


【解决方案1】:

您看到的是类型提升0.1double,所以 0.1 * x 也是 double

你可以像这样转换结果:

return x - ((int)(0.1 * x) ^ 3);

或者干脆完全避免使用double

return x - ((x / 10) ^ 3);

【讨论】:

  • 好的,谢谢,我搞定了。但是如果我想要双倍的结果怎么办?
  • 我认为 Fiddleing Bits 的评论是正确的。第一眼没看懂,但是如果你想把某事带到 3 次方,你想要pow(),即pow(0.1 * x, 3)
  • 在链接数学库时可能会遇到一些问题,具体取决于您的编译/链接方式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多