Накалякал програмку для вычисления корня n-ной степени из a на перле (да, наверное не для того он, но я как раз его учу, и, кроме того, компилировать ничего не надо)
#!/usr/bin/perl
use warnings;
use strict;
use 5.010;
my $base = $ARGV[0]
// die "Usage $0 <base> <power> <quality>\n";
my $power = $ARGV[1]
// die "Usage $0 <base> <power> <quality>\n";
my $req_quality = $ARGV[2]
// die "Usage $0 <base> <power> <quality>\n";
# Получаем из командной строки основание, степень точность в качестве аргументов.
my $quality = 1; # "Качество" - точность вычисления.
my $start = 0; # Нижняя граница числа
my $stop = $base; # Верхняя граница числа
while ($quality >= $req_quality) {
#Пока точность не достигает требуемой
while ($stop-$start >= 2*$quality) {
$start += $quality if ($start+$quality)**$power < $base;
$stop -= $quality if ($stop-$quality)**$power > $base;
#Сдвигаем нижнюю и верхнюю границу числа
#Пока не подберемся вплотную к значению радикала,
}
print "start = $start, stop = $stop, stop - start =", $stop-$start, "\n";
$quality /= 10;
#Увеличиваем точность;
}
my $result = ($start + $stop)/2;
say "Result: $result in the power of $power equals ", $result**$power;
#Печатаем результат и одновременно с этим проверяем, что получилось;
Все бы хорошо, кроме этой строчки:
while ($stop-$start >= 2*$quality)
while ($stop-$start > $quality)
$ ./radical.pl 5 70 0.000000001
start = 1, stop = 2, stop - start =1
start = 1, stop = 1.2, stop - start =0.199999999999999
start = 1.02, stop = 1.04, stop - start =0.0199999999999991
start = 1.023, stop = 1.024, stop - start =0.00100000000000122
start = 1.0232, stop = 1.0233, stop - start =0.000100000000001321
start = 1.02325, stop = 1.02326, stop - start =1.00000000007316e-05
start = 1.023258, stop = 1.023259, stop - start =1.00000000147205e-06
start = 1.0232583, stop = 1.0232584, stop - start =1.00000000946565e-07
start = 1.02325832, stop = 1.02325833, stop - start =1.00000014935375e-08
start = 1.023258322, stop = 1.023258323, stop - start =1.00000074887419e-09
Result: 1.0232583225 in the power of 70 equals 4.99999985235406