Показать сообщение отдельно
  #16  
Старый 26.09.2012, 18:23
Dmitry_DM Dmitry_DM вне форума
Активный
 
Регистрация: 07.08.2012
Сообщения: 258
Версия Delphi: Delphi 7
Репутация: 11
По умолчанию

Цитата:
Сообщение от poli-smen
Где я писал что Sample не участвует в вычислениях? Я писал что в вычислениях не участвуют сэмплы из wav-файла.
Я и не писал что в выводе в файл они не участвуют. Но после вывода в файл идут вычисления, и вот в вычислениях они уже не участвуют.
Можно в начале процесса, но лучше сразу перед подсчётом суммы, т.е. так как это сделано для переменной S2.
Нет, нет. Я не писал что нужно заменить одну строчку на другую. Заменять нужно весь цикл на ту строчку. Т.е. заменить это:
Код:
for Sample := 1 to NumSamples do
  begin
    s:=s+Sample;
  end;
на это:
Код:
s := s + (NumSamples + 1) * NumSamples div 2;
И если переменная S должна быть проинициализирована нулём, то строчку S:=0; в твоём случае нужно поставить сразу перед циклом, а в моём случае упростить заменяющую строчку на такую:
Код:
s := (NumSamples + 1) * NumSamples div 2;
Да, я там забыл квадратный корень из M1. В программе во время теста исправил, а при отправке на форум исправить забыл
Смотри во вложении тестовый пример. Там левая кнопка выводит в левый Memo результат работы твоего кода, а правая кнопка выводит в правый Memo результат работы моего кода. Результаты не должны отличаться. Для вычислений открывать wav-файл не нужно, достаточно ввести в поле ввода значение NumSamples (количество сэмплов), которые ты можешь получить открыв wav-файл в своей программе, ну и заодно убедиться, что результаты работы в твоей программе и в этом тестовом примере не отличаются и не зависят от самого wav-файла.
И ещё обрати внимание, что у тебя там происходит переполнение: если сложить все числа от 1 до 398592 (т.е. 1+2+3+...+398591+398592), то должно получиться огромное число 79437990528, а у тебя показывает всего лишь:Явное переполнение (18 раз). Это всё потому что максимальное число которое можно записать в переменную типа LongWord равно 4294967295. Чтобы не было переполнения нужно использовать более вместительные типы Int64 или Extended.
Ну, по моему, это и так понятно - нужно чтобы в вычислении участвовали также и сэмплы из wav-файла, а не только NumSamples.
Конечно должны учавствовать и сами сэмплы, я это сам знаю. Да, действительно результаты одинаковые, хотя вы не используете сэмплы из wav файла. А как тогда их задествовать? Вы же, наверное, уже вкурсе что я делаю? И догадываетесь про мои дальнейшее манипуляции с файлом. Но пока мне нужно вычислить эксцесс и ассимтрию. Вы знаете эти формулы, в математическом виде? Если нет, я могу их вам написать, как они есть, и тогда можно будет воплотить это на языке програмирования. Спасибо за то, что откликнулись, прониклись моей проблемой и за то, что помогаете. Спасибо!
Ответить с цитированием