将big.Rat与Go结合使用以获取Abs()值

时间:2019-10-09 10:07:21

标签: go

我是Go的初学者和Java开发人员。 我目前在与big.Rat合作。

我需要得到老鼠 n Abs,为此我必须写出

n.Abs(n)或类似big.Rat{}.Abs(n)

为什么不只提供n.Abs()之类的内容? 还是我在某个地方出错?

1 个答案:

答案 0 :(得分:2)

Go的big包在功能签名方面与内存分配有关。 big.Rat由两个big.Int组成,每个uint包含一个int数组。与big.Int(32或64位整数)不同,n.Abs()必须根据其值动态分配。对于较大的值,这意味着数组中有更多元素。

您建议的功能签名n意味着必须为此操作分配与n相同大小的新数组。实际上,我们经常遇到这样的情况,即不再需要原始的Abs,因此我们可以重用其现有的内存。为此,big.Rat函数采用了指向现有n的指针,该指针可能是n.Abs()本身。现在,该实现可以重用内存。现在,调用方可以完全控制要用于这些操作的内存。

这可能不是所有用例的最佳API,实际上,如果您只想对几个大数字进行快速计算,则在具有千兆字节RAM的计算机上,您可能更喜欢let searchInput = document.querySelector('.search-input'); let suggestionsPanel = document.querySelector('.suggestions') searchInput.addEventListener('keyup', function() { const input = searchInput.value; suggestionsPanel.innerHTML = input; }); 版本,但如果您使用大量数字进行数值昂贵的计算,则必须能够控制您的内存。试想一下,例如在Raspberry上进行一些图像处理,在此情况下,可用内存会限制您的使用。在这种情况下,现有的API可以使您效率更高。