gpt4 book ai didi

c# - Math.Pow(10,1.946) 返回 0

转载 作者:行者123 更新时间:2023-11-30 17:28:07 27 4
gpt4 key购买 nike

我正在使用以下代码:

float test = (float)Math.Pow(10,1.946);

问题在于此代码返回 0 而不是 88.30799004。同样当使用下面的代码时,它会返回0:

double test = Math.Pow(10,1.946);

我正在使用 Xamarin,并且在变量处设置了一个断点。使用完全相同的代码,它确实会关闭,但返回 0,这是为什么?

最佳答案

“没有使用 Debug.Write() 并跨过断点:它保持为 0。当我添加 Debug.Write() 并跨过断点时,它确实返回了正确的值 88.30799004。这有点奇怪?”

没有你想的那么奇怪。 “及时”编译器的一项工作或 JiT是为了剪掉死代码。虽然通常在调试构建期间例程会转向“非常小的优化”,但有些例程仍然存在。我曾经编写过这段代码来强制运行时运行到“2 GiB”限制。在我实际添加输出之前什么都没有发生:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace OOM_32_forced
{
class Program
{
static void Main(string[] args)
{
//each short is 2 byte big, Int32.MaxValue is 2^31.
//So this will require a bit above 2^32 byte, or 2 GiB
short[] Array = new short[Int32.MaxValue];

/*need to actually access that array
Otherwise JIT compiler and optimisations will just skip
the array definition and creation */
foreach (short value in Array)
Console.WriteLine(value);
}
}
}

请注意,通常它是一个相当不错且运行良好的部分。但不幸的是,对于简约的测试示例,很容易导致此类问题。

关于c# - Math.Pow(10,1.946) 返回 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53471908/

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