2013-11-01 4 views
0

함수 e^x = 1 + x/1에 대한 perl 코드를 작성했습니다! + x^2/2! + x^3/3! + .. + x^n/n!나누기 연산자에서 십진수 값을 가져 오지 못합니다.

은 x = 1 및 n = 10에 대한 값을 고려하십시오. 내 문제는 분자와 분모 부분에 대한 올바른 값을 얻고 있지만 그것을 $ factor로 나누는 것이다. 나는 소수 값을 얻지 못하고있다. 내가 실수하는 곳에서 나를 교정 해 주시겠습니까?

($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

음, 의도적으로 int() (으)로 전송 중입니다. 그것은 소수점 이하를 버리는 것입니다. int()을 없애면됩니다.

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

print $factor; 

내게는 0.5이 인쇄됩니다.

EDIT : 이것은 약간의 해킹이지만 실제 문제가 있음을 알았습니다. Math::BigInt은 다른 연산자로 무엇을 하든지 항상 정수 나누기를 수행합니다.

use Math::BigFloat; 

[...] 

$denominator = Math::BigFloat->new(Math::BigInt->new($i)->bfac()); 
+0

내가 INT 부분을 멀리 복용했습니다. 그것은 여전히 ​​동일한 $ factor 값을 보여줍니다. 심지어 1/2의 경우 – kay

+0

도 동일한 표현을 시도해도 결과가 모두 훌륭합니다. 그러나 묻는 경우에는 그렇지 않다. – kay

+0

이것은'$ denominator'가 int인데 작동 할 것이지만 그렇지 않다. 그것은'Math :: BigInt'입니다. –

1

문제는 분모가 Math::BigInt 인 것입니다. int 중 하나를 나누면 항상 정수 결과가됩니다. 대신 Math :: BigFloat를 사용하면 작동합니다. 또는 정확한 유리수를 원하면 Math :: BigRat을 사용하십시오.

+0

덕분에,이 지금 작동 – kay

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 
+0

덕분에 너무 도움이! 그만! – kay

관련 문제