首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当浮动数据类型太小时,如何计算Server中的Erlang值?

当浮动数据类型太小时,如何计算Server中的Erlang值?
EN

Stack Overflow用户
提问于 2020-06-19 23:44:04
回答 1查看 770关注 0票数 0

我们正在数据中心实现Erlang计算,我遇到了一个路障:

Server的float数据类型溢出错误。

如何以仍然可以执行算术的方式来表示Server中超过10^308的值?

维基百科: Erlang C

更好地解释Erlang C计算

Erlang C的计算回答了一个问题:“给定一个预测的呼叫量和估计的处理时间,我们应该安排多少个代理来确保在指定的时间内有足够一部分的呼叫者得到答复?”

例如:我们的服务水平为75%的呼叫必须在60秒内应答。下面的图表探讨了与我们的业务相关的各种数量和处理时间的人员配置。

您可以看到,当所需的代理数量超过大约140时,Server就无法处理所需数量的大小。

这里的问题是公式中间的幂项和阶乘项。

]2

例如,导致第一个错误的计算有V=425和AHT=600:

(425个电话/30m@ 10m/call -> 141个呼叫小时/小时-> 141个erlangs) A=141

从n=142开始评估

  1. 对于N=142,A^N是3.02002e+305和N!是2.69536e+245。计算完成后,服务水平约为6%,这是不够的。
  2. 对于N=143,A^N是4.27836e+307和N!是3.85437e+247。计算完成后,会产生大约24%的服务级别,这仍然不够。
  3. 对于N=144,A^N是6.06101e+309,Server试图计算它时会生成一个错误,因为float类型只能处理高达1e308的数字。

编辑:

@chtz和dmuir给出了我需要的提示。

而不是累积A^i和我!另外,我按照建议将它们聚集在一起,enew版本完美无缺。

代码语言:javascript
复制
SELECT 
    @acc_ai_if = @acc_ai_if * @intensity / cast(@agentcount as float)
--  @acc_if = @acc_if * @agentcount
--, @acc_ai = @acc_ai * @intensity  -- this overflows for N>143
;
EN

回答 1

Stack Overflow用户

发布于 2021-03-15 19:14:26

在Server中为A=341和N=1000计算A=341和N=1000

代码语言:javascript
复制
DECLARE @startnum float=1
DECLARE @X float = 1

DECLARE @A float= 341
DECLARE @N float= 1000
;
WITH comp AS (
    SELECT @startnum as num,@A as res
    UNION ALL
    SELECT num+1, res*@A/(num+1) FROM comp WHERE num<@N 
)
SELECT res*(@N/(@N-@A))/((SELECT SUM(res) FROM comp where num<@N)+res*(@N/(@N-@A))) FROM comp where num=@N
option (maxrecursion 32000)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62479983

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档