回到另一个数学问题

时间:2010-09-14 08:28:31

标签: math

memdiff和/或totaldiff为负时会发生什么?我希望有一个负面的memperc,但似乎并没有发生这种情况。当我插入负数时,在Python中乱搞会产生各种令人困惑的结果。

local mem, percent, memdiff, totalMem, totaldiff = GetMemUsage("StarTip")
if mem then
    if totaldiff == 0 then totaldiff = 0.001 end
    memperc = (memdiff / totaldiff * 100)
    local num = memperc
    if num < 1 then num = 1 end
    if num > 100 then num = 100 end
    local r, g, b = gradient[num][1], gradient[num][2], gradient[num][3]
    return GetColorCode(format("%s (%.2f%%)", memshort(mem), memperc), r, g, b)
end

编辑:哦,来吧,问题不是一个坏问题。也许我应该更清楚我要做的事情。

我正在使用两个内存值,一个整体,一个特定于此插件。通过thismem - lastmem创造差异。这是我的不同之处。我有两个,总体和插件具体。当Lua垃圾收集时,当我memdiff / totaldiff * 100时,我会超过100%,当它应该是负数时。我不知道为什么。

EDIT2:

让我举几个例子。

lastmem = 95
mem = 100.
lastaddonmem = 20
addonmem = 25.

totaldiff = mem - lastmem
addondiff = addonmem - lastaddonmem

perc = addondiff / totaldiff * 100 
perc = 100

lastmem = 100
mem = 95.
lastaddonmem = 25
addonmem = 20.

totaldiff = mem - lastmem
addondiff = addonmem - lastaddonmem

perc = addondiff / totaldiff * 100 
perc = 100

我知道我会以错误的方式解决这个问题。这就是我在这里的原因。

编辑3:你们为什么要关闭它?我承认在数学方面我很蠢。难道人们对数学上的挑战有那么多的不宽容吗?我根本就没有数学。数字让我感到困惑,就像我的其他挑战一样。我没有受过教育。我有学习障碍。我不明白什么是重要的。

我最终选择了:

local mem, percent, memdiff, totalMem, totaldiff = GetMemUsage("StarTip")
if mem then
    if totaldiff == 0 then totaldiff = 0.0001 end
    local memperc
    if memdiff < 0 then
        memdiff = abs(memdiff)
        totaldiff = abs(totaldiff)
        memperc = memdiff / totaldiff * 100
        memperc = memperc * -1
    else
        memperc = memdiff / totaldiff * 100
    end
    local num = floor(memperc)
    if num < 1 then num = 1 end
    if num > 100 then num = 100 end
    local r, g, b = gradient[num][1], gradient[num][2], gradient[num][3]
    return GetColorCode(format("%s (%.2f%%)", memshort(mem), memperc), r, g, b)
end

2 个答案:

答案 0 :(得分:1)

  • 如果memdifftotaldiff具有相同的符号,则为memdiff/totaldiff > 0。乘以100不会改变符号

  • 如果memdifftotaldiff有不同的标志,那么memdiff/totaldiff < 0。再次乘以100不会改变这一点。

  • 如果memdiff == 0memdiff/totaldiff == 0。乘以100不会改变这一点。

找出memdiff/totaldiff * 100 > 1的原因,请注意这意味着memdiff*100 > totaldiff暗示100&gt; totaldiff / memdiff。没有规则说百分比必须介于0和1之间。

答案 1 :(得分:1)

if totaldiff == 0 then totaldiff = 0.001 end 

    memperc = (memdiff / totaldiff * 100)

所以如果memdiff&gt; 0.001 memperc将大于100

EG 1:(0.001 / 0.001)* 100 = 100

EG 2:(0.002 / 0.001)* 100 = 200