Wiseacre`s blog

I Belive In Love

Denian Gnu/Linux banner

Могат ли компютрите да смятат?

Има само един коментар. Скучно му е!

Та, могат ли компютрите да смятат? Аз твърдя, че не. Мисля да напиша по-дълъг текст с повечко примери и обязнения но сега, за загрявка ще ви покажа само един. Виждал съм го по книгите, ако не се лъжа е на А. Ралстон (или Ралстън?)

Погледнете следната функция на Pascal:

function Smetka(x: Extended): Extended;
begin
  Smetka:=(sqr(x+1)-2*x-1)/sqr(x)
end;

Разпишете на хартия това, което пресмята. Да напомня, че sqr(x) повдига аргумента на квадрат. Разкрийте скобите и опростете. Лесно е - изискват се знания, които се учат в училище. Какво получихте? Единица? Според вас, тази функция винаги ще получава единица, независимо от стойността на x? Ако мислите така, значи правилно сте опростили израза. И само толкова. Мислите, предполагам, че се шегувам, че ще извадя от ръкава си някакво уж доказателство, в което има хитра уловка и всъщност не е никакво доказателство. Следният код ще ви заблуди, че всичко е наред:

{$D+$R+}
const
  Step=0.000244140625;//1/4096

function Smetka(x: Extended): Extended;
begin
  Smetka:=(sqr(x+1)-2*x-1)/sqr(x)
end;

var
 y: Extended;
 k1,k2: LongInt;
begin
k1:=0;
k2:=0;
y:=Step;
while (y<=1000) do begin
  if(Smetka(y)=1) then inc(k1)
    else inc(k2);
  y:=y+Step;
end;
writeln('k1=',k1);
writeln('k2=',k2);
end.

А как ви се струва

writeln(Smetka(2.56E-14));

Тествайте …


Определете блога на 2008-ма година!!!

Написано от Георги Фурнаджиев

на 07 August 2008 в 22:46

One Response to 'Могат ли компютрите да смятат?'

Subscribe to comments with RSS

  1. Въпреки, че официалният език за програмиране на http://blog.gfurnadzhiev.info е Pascal специално за Данчо преписвам кода на PHP. Пък и да видя дали интерпретаторите могат да смятат ;)

    function Smetka($x){
      return (($x+1)*($x+1)-2*$x-1)/($x*$x);
    };
    
    $Step=0.0625;//=1/16
    $y=$Step;
    $k1=0;
    $k2=0;
    while ($y< =1000) {
      if(Smetka($y)==1) $k1++;
        else $k2++;
      $y=$y+$Step;
    };
    echo "Верен резултат " . $k1 .
            " пъти\nГрешен резултат " . $k2 .
            " пъти\nРезултат за размисъл " . Smetka(0.0000000000000256) . "\n";
    

Leave a Reply

You must be logged in to post a comment.