Is 230 % 5 == 4? Sometimes it is.
I don't want to give this away in this post, but see if you can suss out this problem:
my $value = 200 * 1.15; # 230
print "Value is [$value]\n"; # Value is [230]
my $result = $value % 5; # 4
When you give up, read my answer on O'Reilly Answers.
The actual value of $value isn't integer 230 but a floating point number like 229.99. Stringification rounds off the $value slightly (is that documented anywhere?). The modulus operator is an integer operator and thus converts $value to the integer 229 (I wouldn't mind that giving a warning), hence the result 4.
Lesson of the day: don't mix floating points and integer operations.
Output in Perl 6: 0.
The reason is that 1.25 is represented as a rational number with integer numerator and denominator, so the identity 200 * 1.15 == 230 actually holds.
Put another way:
15:47 <@pmichaud> I'd simply say that Perl 6 knows how to represent 1.15 exactly. :-)
I was figuring that Perl 6 would be more like Smalltalk and have rationals. :) I hope it's really, really fast though. I saw one Smalltalk application that got pretty slow as it was making ever bigger and bigger denominators. Slow and correct is better than fast and wrong, but there's a limit to how correct I really need. :)
There's a whole field of study called Numerical Analysis that deals with problems like this. Or as a colleague of mine once said: 1 + 1 = 3, with rounding.