![]() |
Chromaprint: Unterschied Numerik Delphi vs FPC
Hallo zusammen,
bin gerade dabei die Chromaprint/AcoustID ( ![]() Nun taucht bei den Samples folgendes Problem auf. Das Resampling von Mono 8000bit funktioniert unter Delphi zu 100%. Bei FPC gibts an ein paar Stellen einen Unterschied.
Code:
jetzt nicht wirklich viele Unterschiede, da aber aus dem ganzen ja einmal ein Fingerprint für ne Audiodatei werden soll beunruhigt mich das schon ein wenig. Der Source ist für Delphi und FPC der gleiche. Also kann's nur am Compiler liegen.
Test Resample Mono 8000
======================= Buffer Data Size and Readed Data Size: OK Signals differ at index: 1148, -1 || 0 Signals differ at index: 11628, 1161 || 1162 Signals differ at index: 12588, 7747 || 7746 Signals differ at index: 12748, 1345 || 1344 Signals differ at index: 12988, -5070 || -5069 Signals differ at index: 13548, 6185 || 6186 Signals differ at index: 14588, -2472 || -2473 Signals differ at index: 14668, 1049 || 1050 Signals differ at index: 14988, -3245 || -3244 Buffer Data and Readed Data equal: NOT OK Error Count: 9 / 22040 Wie bekommt man das hin, dass sich FPC mathematisch gesehen "gleich" verhält wie Delphi? BG |
AW: Chromaprint: Unterschied Numerik Delphi vs FPC
Ich nehme an, Du benutzt Double-Fließkomma. Welche FPC-Version, 32- oder 64-Bit? Bei meiner
![]() Ich würde als erstes mal die neuen Versionen versuchen, falls Du es nicht bereits so machst. Falls das nichts hilft, die verdächtigen Funktionen (sin, cos, exp etc) isolieren und durch DAMath-Funktionen ersetzen. Edit: Ein weiteres Problem sind Divisionen von Fließkomma-Konstanten durch Integer wie zB
Delphi-Quellcode:
Hier rechnen alle 64-Bit-Win-FPCs bis 3.1.1 in single precision!!?? mit entsprechender Ungenauigkeit, habe versucht das als Bug zu reporten, ist aber als Feature abgelehnt, weil 1.0 halt exakt als Single darstellbar ist.
{
Win64>FB.exe 3.33333343267441E-001 2.98023223876953E-008 Win32>FB.exe 3.33333333333333E-001 -5.55111512312578E-017 } var d: double; n: integer; begin n := 3; d := 1.0/n; writeln(d:30, n*d - 1.0:30); end. |
AW: Chromaprint: Unterschied Numerik Delphi vs FPC
Gerade für ungenaues Fingerprinting sollten ein paar Ungenauigkeiten aber nicht so schlimm sein :gruebel:
PS: Du beugst ![]() |
AW: Chromaprint: Unterschied Numerik Delphi vs FPC
Hallo gammatester,
ja genau das war das Problem, Bessel Funktion etc. sowie die Divsionen von Double durch Integer. Ich hab nun Deine DaMath eingebunden, und siehe da es funktioniert. Nun wird auch das 8000 Mono Example richtig gerechnet. Besten Dank! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:52 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz