On 1 March 2016 at 19:35, Arghya Das <[email protected]> wrote:
> $num = 1234;
> $sum = 0;
>
> while ( $num != 0)
> {
> $rem = $num % 10;
> $sum = ( $sum * 10 ) + $rem;
> $num = $num / 10;
> }
>
> print $sum;
I suspect you're just exceeding precision limits.
Modified code:
use strict;
use warnings;
my $num = 1234;
my $sum = 0;
while ( $num != 0) {
my $rem = $num % 10;
printf "* rem: %s, sum: %s, num: %s\n", $rem, $sum, $num;
$sum = ( $sum * 10 ) + $rem;
$num = $num / 10;
}
print $sum;
Output:
* rem: 4, sum: 0, num: 1234
* rem: 3, sum: 4, num: 123.4
* rem: 2, sum: 43, num: 12.34
* rem: 1, sum: 432, num: 1.234
* rem: 0, sum: 4321, num: 0.1234
* rem: 0, sum: 43210, num: 0.01234
* rem: 0, sum: 432100, num: 0.001234
* rem: 0, sum: 4321000, num: 0.0001234
* rem: 0, sum: 43210000, num: 1.234e-05
* rem: 0, sum: 432100000, num: 1.234e-06
* rem: 0, sum: 4321000000, num: 1.234e-07
* rem: 0, sum: 43210000000, num: 1.234e-08
* rem: 0, sum: 432100000000, num: 1.234e-09
* rem: 0, sum: 4321000000000, num: 1.234e-10
* rem: 0, sum: 43210000000000, num: 1.234e-11
* rem: 0, sum: 432100000000000, num: 1.234e-12
* rem: 0, sum: 4321000000000000, num: 1.234e-13
* rem: 0, sum: 43210000000000000, num: 1.234e-14
* rem: 0, sum: 432100000000000000, num: 1.234e-15
* rem: 0, sum: 4321000000000000000, num: 1.234e-16
...
* rem: 0, sum: 4.321e+306, num: 1.234e-304
* rem: 0, sum: 4.321e+307, num: 1.234e-305
* rem: 0, sum: Inf, num: 1.234e-306
* rem: 0, sum: Inf, num: 1.234e-307
* rem: 0, sum: Inf, num: 1.234e-308
* rem: 0, sum: Inf, num: 1.234e-309
* rem: 0, sum: Inf, num: 1.23399999999999e-310
* rem: 0, sum: Inf, num: 1.23399999999989e-311
* rem: 0, sum: Inf, num: 1.23399999999891e-312
* rem: 0, sum: Inf, num: 1.23399999999397e-313
* rem: 0, sum: Inf, num: 1.23400000009278e-314
* rem: 0, sum: Inf, num: 1.23400000206904e-315
* rem: 0, sum: Inf, num: 1.23399999712839e-316
* rem: 0, sum: Inf, num: 1.23400009594151e-317
* rem: 0, sum: Inf, num: 1.23399811967893e-318
* rem: 0, sum: Inf, num: 1.2339783570531e-319
* rem: 0, sum: Inf, num: 1.23417598331143e-320
* rem: 0, sum: Inf, num: 1.23516411460312e-321
* rem: 0, sum: Inf, num: 1.23516411460312e-322
* rem: 0, sum: Inf, num: 9.88131291682493e-324
If you modify the code to use arbitrary precision floating point, it
just runs forever.
So you possibly have a logic error. Though it depends entirely on what
you're trying to achieve.
If I had to guess, I'd say you expected " $num / 10 " to return an
integer, not a floating point value.
changing the last line of the "while" to read:
$num = int ( $num / 10 );
Results in the following:
* rem: 4, sum: 0, num: 1234
* rem: 3, sum: 4, num: 123
* rem: 2, sum: 43, num: 12
* rem: 1, sum: 432, num: 1
4321
--
Kent
KENTNL - https://metacpan.org/author/KENTNL
--
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
http://learn.perl.org/