On Friday, July 11, 2003, at 08:09 AM, Shari wrote:


Shari wrote:

 I wonder if I should bombard Kevin with the anomalies I've had to
 find workarounds for... such as random(0) = 1

Under what circumstances would random(0) be expected to provide a useful
result? Why not save the clock cycles by using 0 directly?

From my original post when discovering this anomaly:


Why would one want to get random(0), you ask?

If 0 is a variable, which could be any number, and you write a mathematical function, assuming that if the variable is 0, the end result of the function will also be zero, the function fails.

You are quite right about using 0 directly. You might have a variable or other expression that needs to work in general. And you are right that functions should be generalized as they naturally might.


However, I disagree that this is an anomaly.

The random(x) function is defined to return an integer in the range from 1 up to round(x). We can think of the rounding as incidental and think of only whole numbers. In that case it takes whole numbers 1 and up. That excludes 0 from the domain of the function. The function is not defined for 0. The function is not an anomaly, because 1 up to 0 is not meaningful. I think the function should not crash for numbers outside the domain, but I hold it to nothing else. Well, I would be upset if it returned a very long string.

You can define your own function, say, rnd(), based on random() and use that in your scripts. It will take less time than sending a note to Kevin. You can use that everywhere. It would be at most seven lines long. If you decide you want random(x+1)-1 instead of the version with the _if_, then you can change it in only one place. (And then the function is only three lines long.)

Many built-in functions do force parameters to the closest valid value. If that was done, you still would not get zero.

I, too, am not happy with some built-in functions. For example, I wish mod worked differently, but I can make my own.

I would find useful a completely different random(), perhaps with another name, such as rand(). One that takes a number between 0 and 1 inclusive and returns true or false. In this case, applying it to 0 would always return false. Perhaps this is the kind of thing you are looking for. That can be built. It only has to be built once whether scripted or built-in.

It is my opinion that this is one of those cases in which you bend to the product and not the other way around.

Dar Scott



_______________________________________________
metacard mailing list
[EMAIL PROTECTED]
http://lists.runrev.com/mailman/listinfo/metacard

Reply via email to