相关疑难解决方法(0)

假设使用C中的IEEE754浮点表示浮点数是否安全?

浮点是在C中定义的实现.因此没有任何保证.

我们的代码需要是可移植的,我们正在讨论在我们的协议中使用IEEE754浮点数是否可以接受.出于性能原因,如果我们不必在发送或接收数据时在固定点格式之间来回转换,那将是很好的.

虽然我知道平台和架构之间可能存在关于long或的大小的差异wchar_t.但我似乎无法找到任何具体的floatdouble.

到目前为止我发现字节顺序可能在大端平台上被反转.虽然有不带浮动包含代码,其中点支撑平台floatdouble甚至无法链接.否则平台似乎坚持IEEE754单精度和双精度.

那么可以假设浮点数在IEEE754可用时安全吗?

编辑:回应评论:

你对"安全"的定义是什么?

安全我的意思是,一个系统上的位模式在另一个系统上意味着相同(在字节旋转之后处理字节序).

c floating-point ieee-754

23
推荐指数
2
解决办法
1693
查看次数

将uint64_t转换为double后出现意外结果

在以下代码中:

#include <iostream>

...

uint64_t t1 = 1510763846;
uint64_t t2 = 1510763847;
double d1 = (double)t1;
double d2 = (double)t2;
// d1 == t2 => evaluates to true somehow?
// t1 == d2 => evaluates to true somehow?
// d1 == d2 => evaluates to true somehow?
// t1 == t2 => evaluates to false, of course.
std::cout << std::fixed << 
        "uint64_t: " << t1 << ", " << t2 << ", " <<
        "double: " << d1 << ", …
Run Code Online (Sandbox Code Playgroud)

c++ precision uint64

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

C++ 浮点数差异

我试图在 2 个不同的平台上获得完全相同的结果,即 Solaris 和 Linux(sun-studio vs GCC)。整个代码使用双数据类型。但是当我打印输出时,我看到浮点数的差异(如小数点后 20 位)。

我需要知道的是我是否可以设置一些编译器标志来使 GCC 和 sun-studio 编译器的行为相同。附加图像显示了 Double 数据类型的差异。左侧是 GCC 的输出,另一侧是 sun-studio。

在此处输入图片说明

c++ gcc

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

标签 统计

c++ ×2

c ×1

floating-point ×1

gcc ×1

ieee-754 ×1

precision ×1

uint64 ×1