На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Название темы должно быть информативным !
Прежде чем задать вопрос, воспользуйтесь Поиском. и проверьте в FAQ (ЧАВО) Паскаля
Чтобы получить вразумительный ответ, подробно опишите проблему: что надо сделать, что не получается и номер ошибки (если есть), которую выводит компилятор.
Для вставки кода ваших программ используйте, пожалуйста, кнопку СODE=pas или выпадающий список СODE для других языков (подсветка синтаксиса).
[!] Как правильно задавать вопросы | Руководство по языку B.Pascal 7 & Objects/LR | Borland Pascal. Руководство пользователя
Модераторы: volvo877
  
> Теряется точность при сложении целого и дробного числа
    ExpandedWrap disabled
         doubleR:=m+intr;  // <---- Здесь точность теряется


    Текст программы:


    ExpandedWrap disabled
      function stepen(x,n:longint):longint;
      var
        k,i:longint;
      begin
        k:=1;
        if n=0 then
          k:=1
        else
          for i:=1 to n do
            k:=k*x;
        stepen:=k;
      end;
       
      function _10toR(x:longint;R:longint):string;
      var
        i,ost:longint;
        s,st,chislo:string;
      begin
        repeat
          ost:=x mod R;
          x:=x div R;
          if ost>9 then
            st:=chr(ord('A')-10+ost)
          else str(ost,st);
            s:=s+st;
        until x=0;
        for i:=1 to length(s) do
          chislo:=chislo+s[length(s)-i+1];
        _10toR:=chislo;
      end;
       
      function _Rto10(s:string;R:longint):longint;
      var
        i,z,m,n:longint;
      begin
        m:=0;
        for i:=1 to length(s) do
          begin
            val(s[i],n,z);
            if z<>0 then
              n:=10+ord(UpCase(s[i]))-ord('A');
            m:=m+stepen(R,length(s)-i)*n;
          end;
        _Rto10:=m;
      end;
       
      function AnyToDec(s:string;R:longint):real;
      var
        ints:string;
        doubles:string;
        intR:longint;
        i,z,n:longint;
        doubleR,m:real;
      begin
        ints:=copy(s,1,pos('.',s)-1);  //целая часть
        intr:=_Rto10(ints,r);
        doubles:=copy(s,pos('.',s)+1,Length(s)-1); //дробная часть
        m:=0;
        for i:=1 to length(doubles) do
          begin
            val(doubles[i],n,z);
            if z<>0 then
              n:=10+ord(UpCase(doubles[i]))-ord('A');
            m:=m+n/(stepen(R,i));
          end;
            writeln(m:32:10); // <---- Здесь все хорошо
            doubleR:=m+intr;  // <---- Здесь точность теряется
            writeln(doubler:32:10);
        AnyToDec:=doubler;
      end;
       
      function DecToAny(x:real;R:longint):string;
      var
        tochnost,intx : longint;
        doublex,tempx : real;
        ints,doubles : string;
      begin
        ints:=_10toR(Round(int(x)),r);
        doublex:=frac(x);
        doubles:='';
        tochnost:=1;
        while (doublex>0.0) or (tochnost=8) do
          begin
            doublex:=doublex*r;
            intx:=round(doublex-frac(doublex));
            doublex:=doublex-intx;
            doubles:=doubles+_10toR(intx,r);
            tochnost:=tochnost+1;
          end;
        DecToAny:=ints+'.'+doubles;
      end;
       
      begin
        writeln(_Rto10('12abcdef',16));
        Writeln(_10toR(313249263,16));
        writeln(AnyToDec('12abcdef.888',16):32:12);
        Writeln(DecToAny(313249263.9296875,16));
        readln;
      end.

    Прикреплённый файлПрикреплённый файл____________________.png (54,53 Кбайт, скачиваний: 476)

    Добавлено
    Выхожу за пределы представления real?
    Сообщение отредактировано: Булат Шакиров -
      Цитата
      Выхожу за пределы представления real?

      Да.
      Если твой real = double, то на мантиссу у него отводится 53 бита, что соответствует 15-16 десятичным цифрам, что и наблюдается на картинке
        Double тоже пробовал. Компилятор fpc

        Добавлено
        Значит, эта функция будет выводить string. Косяков быть не должно как бы
        0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
        0 пользователей:


        Рейтинг@Mail.ru
        [ Script execution time: 0,0231 ]   [ 16 queries used ]   [ Generated: 28.04.24, 05:50 GMT ]