是否存在可以在不损失int64的情况下进行转换的浮点数据类型?

时间:2011-03-23 09:46:38

标签: c++ visual-c++ floating-point

Visual C ++中是否有浮点数据类型,尾数中有足够的精度来保存INT64?

示例应该可以执行以下操作:

__int64 from = 0xFFFFFFFFFFFFFFFF;
mightyFP intermediate;
__int64 to;
intermediate = from;
to = intermediate;
assert(from == to);

其中mightyFP是我搜索的未知类型。

的问候, 托拜厄斯

3 个答案:

答案 0 :(得分:2)

简短的回答,没有。 long doubledouble在visual studio中具有相同的表示形式。对于x86,两者的大小都是64位,这不足以保存64位整数的整个范围。

您需要GMP

答案 1 :(得分:2)

请参阅
http://en.wikipedia.org/wiki/Long_double
http://en.wikipedia.org/wiki/Extended_precision

简而言之,所有x86 cpu都支持10字节“扩展精度”类型 (实际上是FPU,后来的CPU总是将它用于内部表示),这是常见的 引用为“long double”。但由于SSE不支持此类型, 现代编译器使其难以访问 - 它可能会变成“双重”的别名 取决于编译器选项(如IntelC中的/ Qlong-double,/ Qpc80)甚至是目标cpu。

尽管如此,即使在现代VS中真的无法启用它,但编写一个包含单行asm实现的简单包装类仍然是一种选择。

答案 2 :(得分:1)

有四倍精度浮点(long double),但我不确定它是否足够精确。您可能希望使用任意精度库,例如GMPMPFR