Visual C ++中是否有浮点数据类型,尾数中有足够的精度来保存INT64?
示例应该可以执行以下操作:
__int64 from = 0xFFFFFFFFFFFFFFFF;
mightyFP intermediate;
__int64 to;
intermediate = from;
to = intermediate;
assert(from == to);
其中mightyFP是我搜索的未知类型。
的问候, 托拜厄斯
答案 0 :(得分:2)
简短的回答,没有。 long double
和double
在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)