2010-09-14 8 views
-2

Que se passe-t-il lorsque memdiff et/ou totaldiff sont négatifs? J'espérais un memperc négatif, mais cela ne semble pas être le cas. Messing around en Python donne toutes sortes de résultats confus lorsque je branche des nombres négatifs.Retour avec une autre question mathématique

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 

Editer: Oh, allez, la question n'est pas une mauvaise question. Peut-être que j'aurais dû être plus clair sur ce que j'essayais de faire.

Je prends deux valeurs de mémoire, une globale et une spécifique à cet addon. Je crée une différence en faisant thismem - lastmem. C'est ma différence. J'ai deux d'entre eux, global et addon spécifique. Quand les ordures de Lua se rassemblent, j'obtiens plus de 100% quand je fais memdiff/totaldiff * 100, quand il devrait être négatif. Je ne sais pas pourquoi.

Edit2:

Permettez-moi de donner quelques exemples.

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 

Je sais que je vais à ce sujet dans le mauvais sens. C'est la raison pour laquelle je suis là.

Edit3: Pourquoi voulez-vous les fermer? J'avoue que je suis bête quand il s'agit de maths. Est-ce que les gens ont une telle intolérance pour les mathématiquement contestés? Je ne comprends tout simplement pas les maths. Les chiffres me confondent comme aucun autre défi. Je ne suis pas inculte. J'ai un trouble d'apprentissage. Je ne vois pas ce qu'est le gros problème.

J'ai fini par aller avec:

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 
+0

qui est python pas – aaronasterling

+0

je ne dis pas qu'il était. La langue n'a pas d'importance. – Scott

+1

Bien sûr, si à la fois memdiff et totaldiff sont -ve alors memperc sera + ve - je vous suggère de nous aider à vous aider en postant certaines de vos entrées et des résultats anormaux. –

Répondre

1
if totaldiff == 0 then totaldiff = 0.001 end 

    memperc = (memdiff/totaldiff * 100) 

Donc, si memdiff> 0,001 memperc sera supérieure à 100

EG 1: (0,001/0,001) * 100 = 100

EG 2: (0,002/0,001) * 100 = 200

+0

selon OP, ceci est des maths et pas de programmation et donc les décimales sont pour noobs. Aller rationnel ou rentrer à la maison. – aaronasterling

+0

Aaron, vous êtes simplement malveillant ici. – Scott

+0

Maintenant, il est logique après avoir relu cela. :) Vous avez trouvé où le problème est, et ce n'est pas où je pensais que c'était. – Scott

1
  • si memdiff et totaldiff ont le même signe, puis memdiff/totaldiff > 0. La multiplication par 100 ne change pas le signe

  • si memdiff et totaldiff ont des signes différents, puis memdiff/totaldiff < 0. Multiplier par 100, encore une fois, ne change pas cela.

  • si memdiff == 0 puis memdiff/totaldiff == 0. La multiplication par 100 ne change pas cela.

pour savoir pourquoi memdiff/totaldiff * 100 > 1, juste noter que cela implique que memdiff*100 > totaldiff ce qui implique que 100> totaldiff/memdiff. Il n'y a pas de règles qui disent que les pourcentages doivent être compris entre 0 et 1.