gpt4 book ai didi

C#算术题

转载 作者:太空狗 更新时间:2023-10-30 00:06:10 26 4
gpt4 key购买 nike

下午好

我从来没有用 C# 做过严肃的数学工作,我只是注意到一些让我感到困惑的事情......如果这是真的

double Test = Math.Sqrt(UInt64.MaxValue)

等于4294967296.0,即UInt32.MaxValue + 1,这是为什么呢

ulong Test2 = UInt32.MaxValue * UInt32.MaxValue;

等于1?乍一看,这里似乎发生了溢出......但为什么会这样,因为该产品应该适合 UInt64

非常感谢。

最佳答案

第一个发生是因为 double 没有 64 位尾数,而只有大约 53 位。所以 UInt64.MaxValue 将在期间四舍五入为 UInt64.MaxValue+1转换为 double。而 Sqrt 显然是 2^32。 double 可以准确表示 (U)Int32 中的任何值,但一些较大的 64 位整数不能表示为 double

第二个发生是因为您在转换为 UInt64 之前进行了乘法运算,即它发生为 UInt32,这显然会溢出。将至少一个操作数转换为 UInt64,问题就会消失。

关于C#算术题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5247814/

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