... At 04:17 PM 4/14/00 -0700, you wrote: >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? > >Since the macro GET_RV(victim, DAM_GEN_INTERTIA) positively works and always >returns the value of 50 in other functions, how can dam be reduced to 0? >Any ideas or insight is most appreciated. Order of evaluation isn't your problem; it's how an integer works. (GET_RV(victim, DAM_GEN_INERTIA) / 100) evaluates to zero, because it equals 0.5, with the fraction truncated. A simple way to work it: dam *= GET_RV(victim, DAM_GEN_INERTIA); dam /= 100; This way, damage is multiplied by 50, and then divided by 100. -Tony Note: I hope this is being sent OK, I'm trying Eudora and can't be sure if it's sending HTML yet. +------------------------------------------------------------+ | 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