gpt4 book ai didi

c++ - 从int64_t转换为double到int64_t再次更改其值

转载 作者:行者123 更新时间:2023-12-03 07:07:02 38 4
gpt4 key购买 nike

int main()
{
int64_t iaVal = (int64_t)9007199258935295;
double daVal = (double)iaVal;
std::cout << "original " << iaVal << "\tAfter conversion " << (std::int64_t)daVal << std::endl;
}
输出:
Original          9007199258935295  
After conversion 9007199258935296
如何从double中获得正确的值?

最佳答案

How can I get the correct value from double ?


你不能。当您将其转换为无法精确表示它的类型时,该值已丢失。考虑类似的情况:我已将 int值42转换为 booltrue。当我将其转换回整数时,它将其值更改为1。如何转换为正确的值? (我不能)
您有以下选择:
  • 仅使用可表示为double的值。 9007199258935295不能表示为64位二进制浮点(IEEE-754)1。所有32位整数都是可表示的。
  • 改用long double。 x86 80位扩展浮点和128位IEEE-754浮点都可以表示所有64位整数。
  • 除了使用有限精度之外,还可以使用任意精度算法,在这种情况下,您无需担心精度不足。 C++标准库不提供任意精度算法的实现。

  • 1尽管IEE-754标准无处不在,但从技术上讲,无泡沫点类型的精度是由C++语言定义的。它由语言实现定义。

    关于c++ - 从int64_t转换为double到int64_t再次更改其值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64890988/

    38 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com