Wiseacre`s blog

I Belive In Love

Хубаво число ли е 1/10?

2 коментара

ЗлеБива (No Ratings Yet)
Loading ... Loading ...

Преди година и нещо зададох въпроса дали компютрите могат да смятат. Тогава дадох един на пръв поглед засукан пример, а накрая предложих тест с безумно малко число. Който е пробвал се е убедил, че отговорът на въпроса е „не, … поне не във всички случаи“. Днес (ако трябва да сме точни – тази вечер) ще ви дам друг пример. Пример, който е някак … човешки и разбираем. Или поне така изглежда.

Добре, нека оставим изчислението на орбитите на планети и спътници на НАСА. Да си спомним какво сме учили в училище. В много лични разговори задавам въпроса: „Кое число е по-хубаво – една трета или една десета?“ Понякога се налага да побутна хората и им напомня, че 1/3 = 0,3333… и така до безкрай, а калкулатора им има ограничен брой цифри. Тогава хората решават, че 1/10 е хубаво число защото е равно на скромното и семпло 0,1. Е да, ама не.

Нека X=0,1+0,1+0,1+ … +0,1 като имате общо десет събираеми. На колко е равно? Човешкият ви разум правилно ще заключи – на 1. Ако накарате компютър да го изчисли директно, най-вероятно ще получите също единица. Например:

var
  x: Double;

begin
  x:=0.1+0.1+0.1+0.1+0.1+0.1+0.1+0.1+0.1+0.1;
end.

Но това се дължи на оптимизация от страна на компилатора ви. Компилаторът ви например може да е засякъл, че може да произведе по-бърз машинен код като упрости израза. Ако не знаете какво е компилатор – това е една програма, която привежда горния текст в разбираем за компютъра (и операционната ви система) вид. С други думи – програма която прави програми. Опитайте сега да изпълните изчислението на стъпки. Например

var
  x,Step: Extended;
  i: LongInt;
begin
x:=0;
Step:=0.1;
for i:=1 to 10 do
  x:=x+Step;
end.

На колко е равно x? Едно ли? Другия път …

Вижте също:

  1. 1 053 000 – запомнете това число
  2. Могат ли компютрите да смятат?

Written by Георги Фурнаджиев

октомври 22nd, 2009 at 10:15 pm

2 Responses to 'Хубаво число ли е 1/10?'

Subscribe to comments with RSS

  1. Предполагам получаваш 0.9 на последното смятане?

    Боян Пейчев

    24 окт 09 at 17:54

  2. О, не – цикълът се върти от 1 до 10 включително. Демек повторенията са си колкото трябва – 10. :)

    Ти колко получи? Обаче искам сравнение if (x=1) или изход abs(x-1) … :)

Leave a Reply