相关疑难解决方法(0)

round()for C++中的float

我需要一个简单的浮点舍入函数,因此:

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++库中,还是缺少?

c++ floating-point rounding

227
推荐指数
11
解决办法
36万
查看次数

为什么浮点数不准确?

为什么有些数字在存储为浮点数时会失去准确性?

例如,十进制数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位内存中表达"太大" ?

language-agnostic floating-point precision

181
推荐指数
4
解决办法
3万
查看次数

在std :: floor之后转换为int可以保证正确的结果吗?

我想要一个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

c++ math floor

38
推荐指数
4
解决办法
2万
查看次数

在C++中将double转换为int而不会出现舍入错误

我有以下代码投入doubleint:

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>.

c++ double int casting

7
推荐指数
2
解决办法
5597
查看次数

将double转换为int的结果是错误的

运行以下代码时,似乎存在某种模糊的舍入错误:

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.这是浮点引擎的缺陷吗?我从来没有见过这样的东西.

c++ casting floating-accuracy

5
推荐指数
1
解决办法
5313
查看次数

将double转换为int?

我的代码如下:

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.为什么?

c double type-conversion

3
推荐指数
1
解决办法
7709
查看次数