首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何用正数和负数来计算增长?

如何用正数和负数来计算增长?
EN

Stack Overflow用户
提问于 2012-09-20 14:39:32
回答 19查看 148.8K关注 0票数 9

我正试图用正数和负数来计算excel的增长率。

代码语言:javascript
运行
复制
This Year's value: 2434
Last Year's value: -2

我使用的公式是:

代码语言:javascript
运行
复制
(This_Year - Last_Year) / Last_Year

=(2434 - -2) / -2

问题是我得到了一个负面的结果。能否计算出一个近似的增长数,如果是的话,如何计算?

EN

回答 19

Stack Overflow用户

回答已采纳

发布于 2012-09-20 14:42:53

你应该得到一个负的结果--你被一个负数除以。如果去年是负增长,那么你就会出现负增长。您可以通过除以Abs(Last Year)来避免这种异常。

票数 2
EN

Stack Overflow用户

发布于 2013-08-23 05:45:16

,您可以尝试将数字空间向上移动,以便它们都变为正数。

为了计算任意两个正数或负数之间的增益,你必须在量值增长世界中保持一只脚,在体积增长世界中保持另一只脚。你可以靠在一边或另一边,这取决于你想要的结果如何出现,每一个选择都有后果。

战略

  1. 创建一个移位方程,生成一个相对于新旧数字的正数。
  2. 将自定义移位添加到旧的和新的数字中,以获得new_shifted和old_shifted。
  3. 采用(new_shifted - old_shifted) /old_shifted计算来获得增益。

例如,:

代码语言:javascript
运行
复制
old -> new
-50 -> 30               //Calculate a shift like (2*(50 + 30)) = 160

shifted_old -> shifted_new
110         ->  190

= (new-old)/old
= (190-110)/110 = 72.73%

如何选择移位函数

如果您的shift函数将数字调得太高,例如,将每个数字加10000,则总是会出现微小的增长/下降。但是,如果这一转变足够大,足以将这两个数字都纳入正数区间,那么在边缘情况下,增长/下降就会出现剧烈波动。您需要在shift函数中拨号,以便对您的特定应用程序有意义。这个问题没有完全正确的解决办法,你必须吃苦耐劳。

将此添加到excel中,查看数字和收益是如何移动的:

代码语言:javascript
运行
复制
                           shift function
old new  abs_old  abs_new  2*abs(old)+abs(new)   shiftedold  shiftednew    gain
-50  30  50          30          160                110         190        72.73%
-50  40  50          40          180                130         220        69.23%
10   20  10          20          60                 70          80         14.29%
10   30  10          30          80                 90          110        22.22%
1    10  1           10          22                 23          32         39.13%
1    20  1           20          42                 43          62         44.19%
-10  10  10          10          40                 30          50         66.67%
-10  20  10          20          60                 50          80         60.00%
1    100  1          100         202                203         302        48.77%
1    1000 1          1000        2002               2003        3002       49.88%

增益百分比受数字大小的影响。上面的数字是一个糟糕的例子,它是由一个基本移位函数产生的。

你必须扪心自问,哪种生物获得的收益最多:

代码语言:javascript
运行
复制
Evaluate the growth of critters A, B, C, and D:
A used to consume 0.01 units of energy and now consumes 10 units.
B used to consume 500 units and now consumes 700 units.
C used to consume -50 units (Producing units!) and now consumes 30 units.
D used to consume -0.01 units (Producing) and now consumes -30 units (producing).

在某些方面,可以说每种生物都是各自最大的种植者。有些人说B是最好的种植者,另一些人则会说D是更大的收益。你得自己决定哪一个更好。

问题是,我们能否将这种我们称之为增长的直觉映射成一个连续的功能,告诉我们人类往往认为什么是“令人敬畏的增长”,而不是“平庸的增长”。

增长是一件神秘的事情

然后你必须考虑到,克里特B可能比生物困难得多,克里特D在未来可能比其他生物有更多的前景。它有个优势!你如何衡量增长的opportunitydifficultyvelocityacceleration?为了能够预测未来,你需要对什么构成“大本垒打”和“生产力上的蹩脚进步”有一种直觉的感觉。

函数的第一和第二导数将给出“增长速度”和“增长加速”。学习微积分,它们是非常重要的。

哪个长得更快?一种正在一分钟一分钟加速其生长的生物,还是一种正在减缓其生长的生物?那么高、低速度和高/低变化率呢?那么耗尽增长机会的概念呢?成本效益分析和利用机会的能力/能力。对抗性系统(你的成功来自于另一个人的失败)和零和游戏呢?

有指数增长,线性增长。和不可持续的增长。成本效益分析和拟合曲线的数据。这个世界比我们想象的要奇怪得多。绘制一条完美的数据线并不能告诉你下一个数据点是哪个,因为黑天鹅效应。我建议所有的人都听这个关于增长的讲座,科罗拉多大学博尔德分校发表了一篇关于增长、它是什么、它不是什么、以及人类是如何完全误解它的精彩演讲。http://www.youtube.com/watch?v=u5iFESMAU58

与热水的温度成一条线,一旦你认为你已经拟合了一条曲线,一只黑天鹅就会出现,水就会沸腾。这种影响在我们整个宇宙中都会发生,你的原始函数(新老的)/old不会对你有所帮助。

这里是代码,它在一个适合我需要的简洁的包中完成了上述大部分概念:

生物生长-(生物可以是“无线电波”、“甲虫”、“石油温度”、“股票期权”等等)。

代码语言:javascript
运行
复制
public double evaluate_critter_growth_return_a_gain_percentage(
        double old_value, double new_value) throws Exception{
    
    double abs_old = Math.abs(old_value);
    double abs_new = Math.abs(new_value);

    //This is your shift function, fool around with it and see how
    //It changes.  Have a full battery of unit tests though before you fiddle.
    double biggest_absolute_value = (Math.max(abs_old, abs_new)+1)*2;
    
    if (new_value <= 0 || old_value <= 0){
        new_value = new_value + (biggest_absolute_value+1);
        old_value = old_value + (biggest_absolute_value+1);
    }
    
    if (old_value == 0 || new_value == 0){
        old_value+=1;
        new_value+=1;
    }
    
    if (old_value <= 0)
        throw new Exception("This should never happen.");
    
    if (new_value <= 0)
        throw new Exception("This should never happen.");
    
    
    return (new_value - old_value) / old_value;
    
    
}

结果

它表现得像人类一样,对动物的成长有一种本能的感觉。当我们的银行账户从-9000到-3000的时候,我们说这比从1000到2000年的增长要好。

代码语言:javascript
运行
复制
1->2     (1.0)  should be bigger than   1->1 (0.0)
1->2     (1.0)  should be smaller than  1->4 (3.0)
0->1     (0.2)  should be smaller than  1->3 (2.0)
-5-> -3  (0.25) should be smaller than -5->-1 (0.5)
-5->1    (0.75) should be smaller than -5->5 (1.25)
100->200 (1.0)  should be the same as  10->20 (1.0)
-10->1   (0.84) should be smaller than -20->1 (0.91)
-10->10  (1.53) should be smaller than -20->20 (1.73)
-200->200 should not be in outer space (say more than 500%):(1.97)
handle edge case 1-> -4: (-0.41)
1-> -4:  (-0.42) should be bigger than 1-> -9:(-0.45)
票数 18
EN

Stack Overflow用户

发布于 2016-10-20 12:28:05

最简单的解决办法如下:

代码语言:javascript
运行
复制
=(NEW/OLD-1)*SIGN(OLD)

如果值为负值,SIGN()函数将产生-1,如果值为正,则生成1。如果前面的值是负值,那么乘以它,就会有条件地反演结果。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12515043

复制
相关文章

相似问题

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