Тема: Считало
Показать сообщение отдельно
Старый 29.06.2007, 01:39   #33
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Re: Считало

Обнаружена и исправлена ошибка.
Т.к. я не обеспечил тестеров всем спектром математических пакетов, то считало протестили лишь на МатКаде. МК позволяет вести точность до 250 знаков.
Сегодня получил письмо от преподавателя (Андрей Леонидович Бескин) об обнаруженной ошибке в вычислении 2^1000.
Сначала подумал - дефект памяти тестируемой машины или некорректный патчинг пакета Mathematica 5 (тестирование производилось на нём).
Быстренько наляпал следующую прогу на С++ (S0M под рукой не оказалось, на МатКаде гипотетически можно, но работает медленнее, а на B3D я кодил утром - уже не интерсно )
#include <fstream.h>

void main()
{
    fstream a,b,R;
     a.open("s4italo.txt",ios::in);
     b.open("maple.txt",ios::in);
     R.open("res.txt",ios::out|ios::trunc);
     char a_byte,b_byte;
     unsigned errors=0;
     while(true){
          a>>a_byte;
          b>>b_byte;

          R<<a_byte<<char(32)<<b_byte<<' '<<int(a_byte==b_byte)<<"\n";
          errors+=a_byte!=b_byte;

          if(a.eof()&&b.eof()){
               break;}

          else if(a.eof()){
               R<<"FATAL ERROR - EOF in A-FILE!"<<endl;
               break;
          }
          else if(b.eof()){
               R<<"FATAL ERROR - EOF in B-FILE!"<<endl;
               break;
          }
     }
     R<<" ready; errors="<<errors<<endl;
     R.close();
     a.close();
     b.close();
}
И что я получил в репорте от проги (сравнение Maple vs СЧИТАЛО)?
ready; errors=142

Явно глючила "математика" S4ITALO. Поковырявшись с alex-mad обнаружили утечку памяти - расширили диапазон вариаций кластера:
#ifndef _iNUM_H_
#define _iNUM_H_
class iNUM {
public:
     unsigned long Size, SizeMax;
     
     unsigned int *Coef;

     bool signum;

     char CODE_ERROR[2];
..........
.........
Теперь тест-утилита показала нулевое различие между числами.
Но тесты больших значений приводили к ошибке.
В результате ошибка была локализована внутри функции "быстрого умножения" (симбиоз найденных в сети статей по быстрым вычислениям и оптимизации alex-mad под мою программную реализацию ).
Несколько часов проектировали распределительные краны и закручивали гайки. И наконец закончили.
Заодно заляпал чек-бокс для дисэйбл прогрессбара. Рекомендую отключать прогрессбар для вычислений, не нуждающихся в визуализации хода выполнения - получите прирост скорости, особенно, в операции возведения в степень.
Апд сливаем там же.
Поздравляю команду с выходом версии
1.1.5
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием