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