gpt4 book ai didi

c# - CPU 不像人类? 0 + 0 不比 10E12 + 9E15 简单吗?

转载 作者:行者123 更新时间:2023-11-30 13:55:54 26 4
gpt4 key购买 nike

我的 child 昨天问了我一个有趣的问题:

Dad, does a computer have trouble adding / multiplying large numbers like I do? Does it take longer?

我笑着回答当然不是,计算机与任何数字一样快,它们就是聪明。

后来,我开始思考,问自己……我真的是对的吗?我用 double 和整数测试了几个场景,是的,数字的大小似乎对 CPU 执行操作所花费的时间没有任何影响(是的,我很无聊)。

高度复杂的测试实现如下:

static void Main(string[] args)
{
Test(1, 0); //JIT test method

var elapsed = Test(int.MaxValue, 0);
Console.WriteLine("Testing with 0: {0} ms", elapsed);

elapsed = Test(int.MaxValue, 1);
Console.WriteLine("Testing with 1: {0} ms", elapsed);

elapsed = Test(int.MaxValue, 1000000);
Console.WriteLine("Testing with 10E6: {0} ms", elapsed);

elapsed = Test(int.MaxValue, long.MaxValue / 2);
Console.WriteLine("Testing with MaxValue/2: {0} ms", elapsed);

Console.ReadKey();
}

private static long Test(int repetitions, long testedValue)
{
var stopwatch = new Stopwatch();
stopwatch.Start();

for (int i=0; i<repetitions; ++i)
{
var dummy = testedValue + testedValue;
}

stopwatch.Stop();
return stopwatch.ElapsedMilliseconds;
}

不过,这个问题一直萦绕在我的脑海中。对于如何在现代 CPU 中准确执行算术运算,我并不是真正的专家,所以我很想知道为什么没有区别。

最佳答案

does a computer have trouble adding / multiplying

不是最好的例子,这些操作可以由处理器中的逻辑电路来执行。专用硬件,它只需要一个 cpu 周期,尽可能快。然而,也有一些悲观的情况,当操作数不是“常规”时,它们就会发生。当数字为 denormal 时会发生这种情况, 太小而无法存储为常规 float 或当其 NaN , 不是数字。

在英特尔手册中被列为“FP 辅助”,处理器逻辑介入并且不再将其留给硬件加法器/乘法器,而是执行微代码。这与它听起来非常相似,是一个嵌入处理器本身的小程序。非常昂贵,很容易需要一百个周期。您会在 this post 中找到一个很好的例子.

对您的 child 来说更直观的是除法,它在硬件上的处理与在纸上的长除法一样单调乏味,并且需要迭代方法。通常需要 10 到 24 个周期,具体时间长短取决于操作数值。值和周期数之间的确切依赖关系是模糊的,处理器供应商将这些实现细节视为商业 secret 。您可能必须尝试一堆随机数才能看到效果。

关于c# - CPU 不像人类? 0 + 0 不比 10E12 + 9E15 简单吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31243766/

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