【问题标题】:I am trying to create my own library/source function on visual studio我正在尝试在 Visual Studio 上创建自己的库/源函数
【发布时间】:2019-10-09 20:18:46
【问题描述】:

到目前为止,我有这个,地板和战俘有红线,它说标识符“地板”是未定义的,我得到与战俘相同的消息。我做错了什么,我该如何解决?

double round_off(double value, double digits)
{
    double roundedval;
    roundedval = floor(value* pow(10, digits) + 0.5) / pow(10, digits);

    return roundedval;
}

【问题讨论】:

  • 请提供minimal reproducible example。如果这是您尝试编译的所有代码,则应该还有其他错误
  • 我的最佳猜测:你没有#include <cmath>
  • 除了上面的评论,你还可以试试std::floorstd::pow看看有没有帮助。
  • @UnholySheep 是的,我将 cmath 包含在 .cpp 文件中。这是我正在尝试创建的头文件,以制作我自己的库,mt 示例是我在头文件中创建的函数。

标签: c++ visual-studio computer-science


【解决方案1】:
  1. 确保你使用

     #include <cmath>
    
  2. 使用 std 命名空间中的函数时使用 std:: 前缀。

     roundedval = std::floor(value* std::pow(10, digits) + 0.5) / std::pow(10, digits);
    
  3. 如果 IDE 仍然找不到函数,请忽略 IDE。只要你的代码编译。构建。并成功运行,IDE的问题可以忽略。

小代码改进建议

你有两个电话给std::pow(10, digits)。它可以减少到一个。

double p = std::pow(10, digits);
roundedval = std::floor(value*p + 0.5)/p;

进一步的改进是根本不使用变量roundedval。函数可以是:

double round_off(double value, double digits)
{
    double p = std::pow(10, digits);
    return std::floor(value*p + 0.5)/p;
}

下一个改进是使用int 作为digits 的类型,而不是double

double round_off(double value, int digits)
{
    double p = std::pow(10, digits);
    return std::floor(value*p + 0.5)/p;
}

【讨论】:

  • 另一个改进就是return std::floor(value*p + 0.5)/p;。不需要roundedval。当然,它只是一个双倍,不应该是一个主要的性能问题,但仍然如此。 技术上是不必要的。
  • @Chipster,确实如此。
猜你喜欢
  • 1970-01-01
  • 2014-08-20
  • 1970-01-01
  • 2020-07-12
  • 2014-11-25
  • 1970-01-01
  • 1970-01-01
  • 2012-08-22
  • 1970-01-01
相关资源
最近更新 更多