gpt4 book ai didi

c# - 为什么我在控制台中得到问号而不是 double 值/NaN,这是什么意思?

转载 作者:行者123 更新时间:2023-12-05 04:25:32 24 4
gpt4 key购买 nike

所以我为 Pow() 编写了一个递归函数,2^int.MaxValue/2 的返回值为“?”。至少写入控制台。这是为什么?

(是的,我知道递归不好......但那是我的任务)

代码:

public static double Pow(double x, int y)
{
if (y > 0)
{
if (y == 1)
{
return x;
}
return Pow(x, y / 2) * Pow(x, (y + 1) / 2);
}
else if (y == 0)
return 1;
else
{
if (y == -1)
{
return 1 / x;
}
return Pow(x, y / 2) * Pow(x, (y - 1) / 2);
}
}

主要内容:

public static void Main()
{
Console.WriteLine($"3^3 = {MyMath.Pow(3, 3)}");
Console.WriteLine($"3^2 = {MyMath.Pow(3, 2)}");
Console.WriteLine($"3^1 = {MyMath.Pow(3, 1)}");
Console.WriteLine($"3^0= {MyMath.Pow(3, 0)}");

double d1 = MyMath.Pow(2, int.MaxValue / 2);
double d2 = MyMath.Pow(2, int.MaxValue);

long l1 = BitConverter.DoubleToInt64Bits(d1);
long l2 = BitConverter.DoubleToInt64Bits(d2);

string s1 = Convert.ToString(l1, 2);
string s2 = Convert.ToString(l1, 2);

Console.WriteLine($"Pow: 2^{int.MaxValue / 2}={d1}");
Console.WriteLine($"Pow: 2^{int.MaxValue}={d2}");
Console.WriteLine($"Pow: 2^{int.MaxValue / 2}={l1}");
Console.WriteLine($"Pow: 2^{int.MaxValue}={l2}");
Console.WriteLine($"Pow: 2^{int.MaxValue / 2}={s1}");
Console.WriteLine($"Pow: 2^{int.MaxValue}={s2}");
}

输出:

3^3 = 27
3^2 = 9
3^1 = 3
3^0= 1
Pow: 2^1073741823=?
Pow: 2^2147483647=NaN
Pow: 2^1073741823=9218868437227405312
Pow: 2^2147483647=-2251799813685248
Pow: 2^1073741823=111111111110000000000000000000000000000000000000000000000000000
Pow: 2^2147483647=111111111110000000000000000000000000000000000000000000000000000

CPU:i5-7500 3.40GHz,4 核

最佳答案

它试图显示“无限”符号,

默认情况下,控制台使用 the 850 code pagethe 437 code page , 不支持该字符。

在我的系统上,默认情况下它在 .Net Framework 控制台应用程序中显示为 8(我觉得这很烦人),但在您的系统上它似乎只显示 ? 以表明它不是受支持的字符。

您应该能够通过将以下内容添加到您的 Main() 方法的开头来解决此问题:

Console.OutputEncoding = System.Text.Encoding.Unicode;

关于c# - 为什么我在控制台中得到问号而不是 double 值/NaN,这是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73218845/

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