LegalWriter writes: > I'm having a problem with the order in which a simple expression is being > evaluated in conjunction with a shorthand assignment operator. > > The relevant lines are: > (GET_RV(victim, DAM_GEN_INERTIA) = 50; > dam = 230; > dam *= (GET_RV(victim, DAM_GEN_INERTIA) / 100); > > After this line executes, dam = 0. In actuality, it should equal 115, since > (by my understanding of the order of evaluation) 50 divided by 100 equals > 1/2. 230 multiplied by 1/2 equals 115. Yes? Yup. In floating point. In integer math, 1/2 = 0 What you need to do is split your function like this: dam *= (GET_RV(victim, DAM_GEN_INERTIA)); dam /= 100; Of course, dam needs to be an int (not a char, quite often it's a char/byte value) or you are quite likely to overflow. --Dan +------------------------------------------------------------+ | Ensure that you have read the CircleMUD Mailing List FAQ: | | http://qsilver.queensu.ca/~fletchra/Circle/list-faq.html | +------------------------------------------------------------+
This archive was generated by hypermail 2b30 : 04/10/01 PDT