我需要一个简单的浮点舍入函数,因此:
double round(double);
round(0.1) = 0
round(-0.1) = 0
round(-0.9) = -1
Run Code Online (Sandbox Code Playgroud)
我能找到ceil()和floor()在math.h中-但不是round().
它是以另一个名称存在于标准C++库中,还是缺少?
为什么有些数字在存储为浮点数时会失去准确性?
例如,十进制数9.2可以精确地表示为两个十进制整数(92/10)的比率,两者都可以用二进制(0b1011100/0b1010)精确表示.但是,存储为浮点数的相同比率永远不会完全等于9.2:
32-bit "single precision" float: 9.19999980926513671875
64-bit "double precision" float: 9.199999999999999289457264239899814128875732421875
Run Code Online (Sandbox Code Playgroud)
这样一个看似简单的数字如何在64位内存中表达"太大" ?
我想要一个floor带语法的函数
int floor(double x);
Run Code Online (Sandbox Code Playgroud)
但是std::floor返回一个double.是
static_cast <int> (std::floor(x));
Run Code Online (Sandbox Code Playgroud)
保证给我正确的整数,还是我有一个一个一个的问题?它似乎有效,但我想肯定地知道.
对于奖励积分,为什么heck确实在第一时间std::floor返回double?
我有以下代码投入double到int:
double dblValue = 7.30;
int intValue = (int)(dblValue*100); //I want intValue to store extactly 730;
cout << intValue;
Run Code Online (Sandbox Code Playgroud)
输出: 729
I know that the compiler is reading dblValue as 7.2999999 before casting it to int.
Run Code Online (Sandbox Code Playgroud)
我的问题是:是否可以通过防止舍入错误将其强制转换为730?
如果您的解决方案避免使用C++ 11或其他预定义函数,那将是最好的.我在这里使用的唯一预处理器指令是<iostream>.
运行以下代码时,似乎存在某种模糊的舍入错误:
int roundedTotal = (int)(PriorityJob * 100.0);
Run Code Online (Sandbox Code Playgroud)
最初PriorityJob = 1.4并且roundedTotal未定义.PriorityJob * 100.0那时的评估给出了140.之后roundedTotal = 139.
显然,140.0被解释为139.99999.这是浮点引擎的缺陷吗?我从来没有见过这样的东西.
我的代码如下:
int main(int argc, char *argv[])
{
double f = 18.40;
printf("%d\n", (int)(10 * f));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
VC6.0中的结果是184,而Codeblock的结果是183.为什么?