关于solidity中数值的复利计算教程:英雄联盟投注平台

By admin in 零售 on 2021年4月17日

lol比赛押注

英雄联盟投注平台_介绍在前面的文章中,我们是如何计算百分比和Solidity的。在金融数学中,百分比通常与贷款和存款利息有关。

每一个期间(例如一个月或一年)结束时,本金的一定比例就会缴纳给贷方或存款所有者。这种模式称为单利,每个期间缴纳的比率称为定期利率。

在电脑程序中,通常用于利率替代利率。例如,对于3%的利率,比率为0.03。因此,可以将一段时间的利息支付金额除以本金金额来计算。

上一句话后,Solidity已经告诉了如何有效准确地执行此任务。(大卫亚设,Northern Exposure(美国电视),成功)非常简单的利率模式非常简单,但如果不立即向贷款人或存款持有人缴纳利息,而是加上本金,情况就不会变得更加简单。在这种情况下,过去期间累计的利息不影响以后要缴纳的利息。

本文讨论了在Solidity中构建该模型的方法。这个型号的名字是复利。定期复利我们已经告诉了计算单利的方法。计算复利所需的方法是在每个期末计算单利,然后将计算出的利润加到本金中。

在JavaScript等高级语言中,principal=ratio * principal//Do after each time period,其中ratio表示完全分数,但Solidity不反对分数,因此Solidity必须写principal=muldiv (ratio,prince),用于前面的句子muldiv函数,ratio表示点上述代码在大多数情况下都可以使用,但=操作员可能会被阻止,因此为了代码安全,必须展开principal=add (principal,muldiv (ratio,principal,11tio))等更改,在本文中,Solidity反对少数,算术运算在实际代码中,这些操作员将被所需的功能所代替。一旦你告诉我如何在单一时间内减少利息,问题如下。各期结束时如何复利?与传统应用程序不同,智能合同不能有任何后台活动。

lol比赛押注

智能协议的字节字节只有在需要交易或通过其他智能协议调用合同时才会继续。人们可以依赖第三方服务,如Provable(以前称为Oraclize),定期调用特定的智能合同,或者经济上鼓励普通人。

这种方法虽然有效,但也有很多缺点。首先,因为有人要交gas费,所以不是免费的。第二,即使每个人在下一个期间不能访问修订后的本金,也必须在每个周期结束时减少利息。第三个时间段越高,需要继续执行的混合越频繁,gas消耗就越少。

第四,交易发掘时间不可预测,网络阻抗高时可能会相当大,因此短时间内不准确。因此,如果在每一段时间的最后开展福利不是Solidity的好主意,我们应该什么时候加息?更好的方法是,只有当有人需要提供本金或债务或存款时,才展开复利,而不是每期末复利,而是在这段时间结束的所有期间展开复利。最后:uint current period=block . timestamp/period length;FOR(uint Period=Last Period;PeriodcurrentPeriod持续时间)principal=ratio * principalLastperiod=当前期间;该代码将所有尚未复利的利息特定于本金,每当有人采访本金时,都要继续执行。

这种方法被称为“惰性”充电,实际上推迟到有人实际需要他们的结果。但是上面显示的“惰性”混合的构建没有最重要的问题。实际gas消费量线性不同,最后,继利息混合后,您可以看到经过了多少时间间隔。

如果持续时间短或最后一次复利时间长,则所有经过期间复利所需的气体量都可能达到区块gas限制,实际上无法开展进一步的复利。(大卫亚设,Northern Exposure(美国电视剧),季节名言)所以问题是:如何更有效地扩大“惰性”的填充?首先,我们注意到单个期间的福利可以这样代替:principal *=1 ratio对于两个时间间隔,principal *=(1 ratio)*(1 ratio);然后(1r)=1 (2r r),因此,双重间隔的有效利率是2r r r。

lol比赛押注

其中r是单个间隔的利率。如果想要引起关注的间隔数是偶数,则可以将间隔时间增加一倍,将间隔数减少到。

如果间隔数为奇数,则可以连续运行一次复利,使剩下的间隔数成为偶数。这是代码:function compound (uint principal,uint ratio,uint N)public pure returns(uint){ while(n0){ IP} else { ratio=2 * ratio ratio * ratio;N/=2;} } return principal}上述代码具有对数复杂性,本金和比例较小时效果较好。

因此,principal * ratio乘积具有足够的有效小数,以建立高精度。但是,如果principal和ratio很小,则上述代码可能会产生不正确的结果。

现在的问题是:如何提高延期复利的准确度?在上面显示的代码中,精度为principal=principal * ratio这是因为假设主体是整数,所以指定值所需的近似值会计算值。近似值可以连续运行多次,并且不会特别一起发生近似值错误。为了解决这个问题,可以看到n个小时间隔内的利息可以很简单,如下所示:principal *=(1 ratio)* * n;如果Solidity反对分数,这个代码就会起作用,但只要不反对,我们就要自己构建电力运算。

代码非常相似,因为它使用与上一节完全相同的日志复杂性方法。functionpow (uintx,uintn)公共预算返还(uintr){ r=1.0;while(n0){ if(n % 2==1){ r *=x;N-=1;} else { x *=xN/=2;} } function compound(uint principal,uint ratio,uint n)public pure returns(uint){ return principal *}确认表达式。r=1.0。

在这里,我们在这里处分分数时,Solidity肯定反对他们,但不实际反对。人们将不得不把所有算术运算变成构建分数数学的函数。例如,这是ABDK Math 64.64库中使用的实际代码的形状,它构成了对64.64位顶点数的算术操作。functionpow (int128x,uintn)公共纯返还(int128r) {r=While (n0) {if (n% 2==1)N-=1;} else {x=ABDKMath64x64.mul (x,x);N/=2;} } } function compound(Uint principal,uint ratio,Uint n)public pure returns(Uint){ return abdk math 64 x 64 .上述代码非常准确和必要,但被限制在线性时间间隔内。

如果我们必须在给定的时间间隔内减少利息怎么办?这个模型叫做反向复利反向复利的想法是计算给定(相同)期间的利息。配置它的一种方法是用于小数周期。

我们已经知道了计算N周期复利的方法:Principal *=(1 RATIO)* * N;假设期限为一年,我们要计算一个月的福利,即一年的1/12。以下公式是错误的:Principal *=(1 Ratio)* *(1/12);出乎意料的是,上图的实体性和pow函数都不反对分数指数。

可以通过整数幂和根或相同基数代数和指数来组织它们,但可以用更简单的方法扩展倒计时填充吗?(大卫亚设,Northern Exposure(美国电视剧),精华)现实世界的时间是倒数第一,或者至少看起来是这样。以太的时间是线性的。以秒为单位以整数响应。因此,如果以1秒为周期定期复利,就可以用逆水进行复利。

因为网络桌面新闻网在周期中间没有人仔细观察本金。乍一看,每秒复利的想法可能看起来很奇怪,但在以太坊,其效果令人惊讶。年利率的3%本质上是EOS 0.00000093668115524%的每秒利率或0.00000093668155每秒18个十进制数的利率。

英雄联盟投注平台

这里我们假设一年的时间是31556952秒。该功能用于填补一年(31556952个周期),该比率以2.9999999895%的年利率得出结论,因此准确度完全超过10个有效数字。对大多数应用程序来说已经足够了。如果用在128.128位固定点上,而不是64.64位或浮点数上,则可以获得更高的精度。

在我们的实验中,填补一年的定期每秒利息大约消耗90Kgas。在大多数应用中可能可以忍受,但总体来看很高。我们的下一句话,我们将准确地说明获得相同精度的更便宜的方法。结论简单的分数计算(例如,计算填补定期利率所需的分数)可能会因当地分数数字不足而挑战Solidity。

但是,平方算法中使用的电力运算和模拟中使用的顶点数仍然可以有效计算复利。建议的方法不足以在一年(或更长时间)内提高每秒利率。但是这种方法非常缺乏gas。

下一句,我们将说明更好的方法,下一个主题是指数和对数。_英雄联盟投注平台。

本文来源:英雄联盟投注平台-www.inoberry.com

Comments are closed.

网站地图xml地图
Copyright @ 2010-2021 lol比赛投注网站-lol比赛押注-英雄联盟投注平台 版权所有