0

I having written a perl code for a function e^x = 1 + x/1! + x^2/2! + x^3/3!+.. + x^n/n!

consider values for x = 1 and n =10. My problem is I am getting correct values for the numerator and denominator part but while dividing them into $factor. I am not getting the decimal values. Could you please correct me where I am making mistake.

($x, $n) = @ARGV; # for x=1 , n =10
say "\n Your entered values are ", $x, "   ", $n;
for my $i (1..$n)
{
$numerator = $x**$i;
$denominator =  Math::BigInt->new($i)->bfac();
$factor = int($numerator / $denominator); # tried it without typecasting then too noluck
$exp = $exp + $factor; #[$numerator/$denominator];
say $i, "\n Numerator :", $numerator, "Denominator :", $denominator, " Factor :", $factor, "  EXP :", $exp; 
$i++;   
}
4

3 回答 3

4

好吧,你故意投射到int(). 那就是扔掉小数点后的任何东西。拿走int()你应该没事的。

$numerator = 1;
$denominator = 2;
$factor = $numerator / $denominator;

print $factor;

为我打印0.5

编辑:这有点小技巧,但我发现了真正的问题——Math::BigInt不管你对其他运算符做什么,总是进行整数除法。您可以通过以下方式解决此问题:

use Math::BigFloat; 

[...]

$denominator = Math::BigFloat->new(Math::BigInt->new($i)->bfac());
于 2013-11-01T03:30:07.687 回答
1

问题是您的分母是Math::BigInt. 将 int 除以其中一个总是会产生整数结果。如果您改用 Math::BigFloat,它将起作用。或者,如果您想要精确的有理数,请使用 Math::BigRat。

于 2013-11-01T03:43:27.193 回答
0

这对我有用bignum

#!/usr/bin/perl
use strict;
use warnings;
use 5.014;
use bignum;

my ($x, $n) = @ARGV; # for x=1 , n =10
say "\n Your entered values are ", $x, "   ", $n;
my $exp;
for my $i (1..$n)
{
    my $numerator = $x**$i;
    my $denominator =  Math::BigInt->new($i)->bfac();
    my $factor = $numerator / $denominator; # tried it without typecasting then too noluck
    $exp += $factor; #[$numerator/$denominator];
    say $i, "\n Numerator : ", $numerator, " Denominator :", $denominator, " Factor :", $factor, "  EXP :", $exp; 
}

输出是:

C:\Old_Data\perlp>perl t7.pl 1 10

 Your entered values are 1   10
1
 Numerator : 1 Denominator :1 Factor :1  EXP :1
2
 Numerator : 1 Denominator :2 Factor :0.5  EXP :1.5
3
 Numerator : 1 Denominator :6 Factor :0.1666666666666666666666666666666666666667  EXP :1.6666666666666666666666666666666666666667
4
 Numerator : 1 Denominator :24 Factor :0.04166666666666666666666666666666666666667  EXP :1.70833333333333333333333333333333333333337
5
 Numerator : 1 Denominator :120 Factor :0.008333333333333333333333333333333333333333  EXP :1.716666666666666666666666666666666666666703
6
 Numerator : 1 Denominator :720 Factor :0.001388888888888888888888888888888888888889  EXP :1.718055555555555555555555555555555555555592
7
 Numerator : 1 Denominator :5040 Factor :0.0001984126984126984126984126984126984126984  EXP :1.7182539682539682539682539682539682539682904
8
 Numerator : 1 Denominator :40320 Factor :0.0000248015873015873015873015873015873015873  EXP :1.7182787698412698412698412698412698412698777
9
 Numerator : 1 Denominator :362880 Factor :0.000002755731922398589065255731922398589065256  EXP :1.718281525573192239858906525573192239858942956
10
 Numerator : 1 Denominator :3628800 Factor :0.0000002755731922398589065255731922398589065256  EXP :1.7182818011463844797178130511463844797178494816
于 2013-11-01T03:58:46.510 回答