Talk:Square root: Difference between revisions
imported>Bale A function is not an operator! |
imported>StDoodle No edit summary |
||
Line 10: | Line 10: | ||
* Whoa, whoa, WHOA! What the heck are you going on about? <code>square_root()</code> is a function that returns a float. It's not a mathematical operator. Like any other function it will always return a value of the appropriate type, even if its parameters are integers. Do you think it is somehow tricky for a function that takes integer parameters to return a float? That's just silly. --[[User:Bale|Bale]] 20:10, 29 June 2010 (UTC) | * Whoa, whoa, WHOA! What the heck are you going on about? <code>square_root()</code> is a function that returns a float. It's not a mathematical operator. Like any other function it will always return a value of the appropriate type, even if its parameters are integers. Do you think it is somehow tricky for a function that takes integer parameters to return a float? That's just silly. --[[User:Bale|Bale]] 20:10, 29 June 2010 (UTC) | ||
Though I'm sure the semantics differ between languages, a mathematical operator is essentially just a shorthanded function. As my code sample shows, you can "return a float" without that float necessarily being what one would expect from the mathematical operation (assuming you can accept the idea that a mathematical operation is essentially a function). For some idea what I mean, check this out: | |||
{{CodeSample| | |||
code= | |||
<syntaxhighlight> | |||
float division(int a, int b) { | |||
return a / b; | |||
} | |||
float division(float a, int b) { | |||
return a / b; | |||
} | |||
float division(float a, float b) { | |||
return a / b; | |||
} | |||
void main() { | |||
print("Integers: 5 / 2 = " + division(5,2)); | |||
print("Mixed: 5.0 / 2 = " + division(5.0,2)); | |||
print("Integers: 5.0 / 2.0 = " + division(5.0,2.0)); | |||
} | |||
</syntaxhighlight> | |||
}} | |||
As we don't have any other functions that accept a numerical paramters without being specifically overloaded to return a type matching the least restricted parameter type, it's hard to tell what's "normal" behavior for a math function in KoLmafia; which is why I pointed out that one might be tempted to use mathematical operators as one's basis. By the way, by this logic, square_root(5) would return 2.0; which is a float, but after conversion from its int counterpart (similar to what happens in the division above). BTW, I'm not saying I personally thought that was how square_root() would behave; I'm just trying to defend the assumption that was made in the original code sample as being not unreasonable. --[[User:StDoodle|StDoodle (#1059825)]] 23:31, 29 June 2010 (UTC) |
Revision as of 23:31, 29 June 2010
It won't truncate -- integer truncation only occurs when you have one integer divided by another. If one of the two terms is a float, then the other will be automatically converted to a float before performing the operation. --Heeheehee 17:43, 26 June 2010 (UTC)
It can be a bit confusing for some. square_root() works a little differently than most math operations. For example:
float f; f = 5 / 2;
will return 2.0
This is, of course, because the operation has only integers to use, and thus computes an integer result; THEN it converts this to a float. If either of the two numbers is a float (ie "5.0 / 2" or "5 / 2.0") the result would be 2.5, as "expected," because when two different datatypes are used, an implicit conversion to the most precise type is the norm. So it is a bit "unexpected" that square_root() will accept an int, and make an automatic float conversion. We should probably note this somewhere... --StDoodle (#1059825) 15:32, 29 June 2010 (UTC)
- Whoa, whoa, WHOA! What the heck are you going on about?
square_root()
is a function that returns a float. It's not a mathematical operator. Like any other function it will always return a value of the appropriate type, even if its parameters are integers. Do you think it is somehow tricky for a function that takes integer parameters to return a float? That's just silly. --Bale 20:10, 29 June 2010 (UTC)
Though I'm sure the semantics differ between languages, a mathematical operator is essentially just a shorthanded function. As my code sample shows, you can "return a float" without that float necessarily being what one would expect from the mathematical operation (assuming you can accept the idea that a mathematical operation is essentially a function). For some idea what I mean, check this out:
float division(int a, int b) {
return a / b;
}
float division(float a, int b) {
return a / b;
}
float division(float a, float b) {
return a / b;
}
void main() {
print("Integers: 5 / 2 = " + division(5,2));
print("Mixed: 5.0 / 2 = " + division(5.0,2));
print("Integers: 5.0 / 2.0 = " + division(5.0,2.0));
}
As we don't have any other functions that accept a numerical paramters without being specifically overloaded to return a type matching the least restricted parameter type, it's hard to tell what's "normal" behavior for a math function in KoLmafia; which is why I pointed out that one might be tempted to use mathematical operators as one's basis. By the way, by this logic, square_root(5) would return 2.0; which is a float, but after conversion from its int counterpart (similar to what happens in the division above). BTW, I'm not saying I personally thought that was how square_root() would behave; I'm just trying to defend the assumption that was made in the original code sample as being not unreasonable. --StDoodle (#1059825) 23:31, 29 June 2010 (UTC)