【问题标题】:% versus FMOD for calculating modulus [closed]用于计算模量的 % 与 FMOD [关闭]
【发布时间】:2012-06-29 21:55:31
【问题描述】:

我的控制台应用看起来像这样。

#include "stdafx.h"
#include <iostream>
#include <cmath>
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
    int a, b;
    cin>>a>>b;
    cout<<"% "<<a%b<<endl<<"fmod "<<fmod(a,b)<<endl;
    system("pause");
    return 0;
}

我是 C++ 新手,我有 2 个问题:

  1. 在 VS 上编写此应用程序。为什么我需要包含“stdafx.h”?有什么要求吗?这是什么?
  2. fmod% 之间有什么区别吗?为他们获得完全相同的结果:

提前谢谢..

【问题讨论】:

标签: c++ windows visual-studio-2010 visual-studio console-application


【解决方案1】:

fmod( a , b ) 将在传递参数时将 int 变量 a 和 b 转换为浮点数。根据 a 和 b 的类型(例如,如果您使用 std::uint64_t),您可能会在强制转换期间失去精度并返回不正确的内容。返回类型也将是浮点数,如果您使用具有 int 类型的函数,则需要再次强制转换。对于 int 类型,您应该坚持使用 % 。使用 fmod 效率较低。

【讨论】:

    【解决方案2】:

    在 VS 上编写此应用程序。为什么我需要包含“stdafx.h”?有什么要求吗?这是什么?

    因为默认项目设置表明您需要预编译头文件(请参阅this)。

    您可以手动禁用此功能。如下图所示选择Not Using Precompiled Headers


    fmod 和 % 有什么区别吗?为他们获得完全相同的结果:

    是的。 % 不能对浮点数进行操作,而 fmod 可以。 fmod 中的 f 表示浮点数。

    试试这个:

    float a, b;
    std::cin>>a>>b;
    std::cout << (a%b) << std::endl; //it will give compilation error.
    

    【讨论】:

      猜你喜欢
      • 2017-05-31
      • 2013-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多