C++中Round函数的未知行为
Unknown behavior of Round function in C++
#include <iostream>
int main()
{
double number1 = 1.4999999999999999;
double number2 = 1.499999999999999;
std::cout << "NUMBER 1 => ROUND (" << number1 << ") = " << round(number1) << std::endl;
std::cout << "NUMBER 2 => ROUND (" << number2 << ") = " << round(number2) << std::endl;
std::cin.get();
}
上述代码的输出如下:-
数字1=>圆形(1.5(=2
数字2=>圆形(1.5(=1
我不清楚我的数字1和数字2是如何变为1.5的,如果是的话,它们会变为1.5,那么为什么同一个数字的舍入函数的两个不同输出。
尝试使用长双仍然相同的输出
我正在使用Visual Studio 2019,这会有什么不同吗?
#include <iostream>
int main()
{
double number0 = 1.5;
double number1 = 1.4999999999999999;
double number2 = 1.499999999999999;
std::cout << (number1 == number0) << " " << (number2 < number0) << std::endl;
}
在使用IEEE-754表示浮点的平台上,上述输出1 1。在这种情况下,number1
被精确地存储为1.5
并且被四舍五入到2
,而number2
具有严格小于1.5
的值并且被四入到1
。
在使用IEEE-754浮点表示的机器上(即目前的大多数机器(。CCD_ 7与1.5完全相同。
您可以使用std::hexfloat
:检查位模式
#include <iostream>
#include <iomanip>
int main()
{
double number1 = 1.4999999999999999;
double number2 = 1.499999999999999;
std::cout << std::hexfloat << number1 << " " << number2 << std::endl;
}
打印0x1.8p+0 0x1.7fffffffffffbp+0
相关文章:
- 双链表的擦除值函数,未知错误
- 在带有模板的函数中传递未知大小的 std::数组.如何更正此代码?
- 如何创建参数数量未知的函数?
- 通过 C++ 中的重载构造函数初始化未知类型的变量
- 线程 std::调用未知类型,无法专门化函数错误
- 参数数据类型未知的可变参数函数
- 通过模板函数对未知类型调用方法
- 在回调中使用函数时,C++未知重写说明符
- 在库的未知类中调用函数
- 当数组大小在C++中未知时,如何在运行时将对字符串数组的引用作为函数参数传递?
- 如何获取指向未知重载函数的任何重载的指针?
- 在 C++ 的模板函数中初始化自动(未知)类型的向量
- GCC 升级导致模板函数的静态局部变量变得未知
- 使用来自C++的任意数量的参数(在编译时未知)调用 Python 函数
- 断言失败<dst.data != src.data >在未知函数中。/../ocv/opencv/modules/imgproc/src/imgwarp.cpp
- 断言失败 <0 <= i && i < <int>vv.size<>> 在未知函数中,文件 src\matrix.cpp,第 912 行
- 协助添加未知函数.(C++)
- 如何从动态库中调用未知函数
- 在未知函数中断言失败
- OpenCV 2.2:未知函数中的错误参数,文件.. .ocv OpenCV modulescoresr