Обнаружена и исправлена ошибка.
Т.к. я не обеспечил тестеров всем спектром математических пакетов, то
считало протестили лишь на
МатКаде. МК позволяет вести точность до 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
СЧИТАЛО)?
Явно глючила "математика" 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