长双精度的替代品,在Windows和Unix上具有相同的精度
Alternative to long double which has the same Precision on Windows and Unix?
我正在编写一个工具,该工具允许您将特定日期格式(Unix Time,HFS,Fat-Time,...)的给定数字(Dec,Bin,Hex)转换为人类可读的日期字符串。
我在使用 Windows OLE-Date 时遇到问题,它以双精度值表示日期和时间。现在我在Windows和Unix中得到了不同的输出。它只是Outputdate的第二个差异,但我想在Windows和Unix平台上生成相同的输出。
我正在使用long double
来存储值。我知道Visual Studio C++编译器和 gcc 使用不同的精度进行long double
。是否有在两个平台上使用相同的精度的替代方案?
当Windows OLE-Date是double
时,为什么需要使用long double
?只需将所有平台使用double
,它仍然可以使用数十年甚至几个世纪
如果确实需要更高的分辨率,那么有很多解决方案
-
使用具有 2 个字段的结构作为秒和秒的小数部分,就像
struct timespec
struct timespec { time_t tv_sec; long tv_nsec; };
返回双精度时,只需将其拆分为 int 部分和小数部分,并将它们内部存储在结构中。需要时将结构转换回双精度
-
在所有平台上使用 80 位扩展精度
long double
。在Windows上,这可以通过使用其他编译器(如GCC,Clang或ICC)轻松完成。它们允许您更改格式或long double
,例如在 GCC 中有-mlong-double-64/80/128
和-m96/128bit-long-double
标志,ICC 具有/Qlong-double
相关文章:
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 在UNIX系统中使用DIR查找文件的字节大小
- 如何防止 c++ 在从浮点型转换为双精度型(不适用于 IO)时添加额外的小数?
- 正在将csv文件读取为双精度矢量
- 当套接字连接断开时检测C/C++Unix
- 如何理解将半精度指针转换为无符号长指针和相关的内存对齐
- 我可以信任表示整数的浮点或双精度来保持精度吗
- 如何在C++中的同一函数中使用字符串和双精度
- 特征::矩阵<双精度,1,3> 结构类型函数中的返回类型函数
- C++:floor unix时间戳到UTC月份
- 如何在C/C++中用FD_set Unix设置套接字文件描述符
- 当使用比格式支持的精度更高的精度来显示数字时,会写出什么数据
- 如何计算具有指定类型的表达式的相对精度和绝对精度
- 如何打印boost多精度128位无符号整数
- 检查是否以特定精度给出双精度
- 转换函数,将 std::数组的双精度作为参数或双精度作为参数单独转换
- C 字符串返回字符串的整数/双精度/长整型值
- 为什么将双精度转换为 int 似乎在第 16 位数字之后将其四舍五入?
- 如何使双精度值的 C++ 和 C# 中的结果相同
- 长双精度的替代品,在Windows和Unix上具有相同的精度