Odpowiedz 
 
Ocena wątku:
  • 0 Głosów - 0 Średnio
  • 1
  • 2
  • 3
  • 4
  • 5
Porównanie języków programowania
SQ6OXK Offline
Paweł
****

Liczba postów: 317
Dołączył: 23-06-2010
Post: #12
RE: Porównanie języków programowania
Ok,

Według życzenia poprawione BASCOM-y.

Wersja z float (single):
Kod:
$noinit
$noramclear

$regfile "m32def.dat"
$crystal = 16000000

Dim Fclk As Dword
Dim Fvfo As Dword
Dim Pom As Single
Dim Pom2 As Single
Dim Ftw As Dword

Fclk = 400000000
Fvfo = 20000000

Pom = &H100000000
Pom2 = Fvfo
Pom = Pom * Pom2
Pom2 = Fclk
Pom = Pom / Pom2
Ftw = Pom

End

.zip  test_1a_ba.zip (Rozmiar: 4.3 KB / Pobrań: 821)

Wynik:

Kod: 888 (40+848)
Cykle: 1 609 (20+1 589) - ~101ns
Wynik: 0x0CCCCCD0



Wersja z Double:
Kod:
$noinit
$noramclear

$regfile "m32def.dat"
$crystal = 16000000

Dim Fclk As Dword
Dim Fvfo As Dword
Dim Pom As Double
Dim Pom2 As Double
Dim Pom3 As Single
Dim Ftw As Dword

Fclk = 400000000
Fvfo = 20000000

Pom = &H100000000
Pom3 = Fvfo
Pom2 = Pom3
Pom = Pom * Pom2
Pom3 = Fclk
Pom2 = Pom3
Pom = Pom / Pom2
Ftw = Pom

End


.zip  test_1b_ba.zip (Rozmiar: 7.13 KB / Pobrań: 825)

Wynik:

Kod: 1 590 (40+1 550)
Cykle: 3 439 (20+3 419) - ~215ns
Wynik: 0x0CCCCCCD



Okazało się że w BASCOM-ie nie można bezpośrednio przypisać zmiennej DWORD do Double.

Najpierw wykonałem próby z mnożenie i dzielenie Double i Single (Float) okazało się jednak, że wyniki są nieprawidłowe.
Nie wiem czy to błąd symulatora czy samego kompilatora, trzeba będzie sprawdzić to na procesorze.
Stąd własnie najpierw konwersja danych z DWORD do Single, a następnie dopiero z Single do Double.

Wyniki oczywiście przez takie podwójne konwersję, są znacznie słabsze.

--= SWL SP6-01-396 =--
01-04-2012 9:29
Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
Odpowiedz 


Wiadomości w tym wątku
RE: Porównanie języków programowania - SQ6OXK - 01-04-2012 9:29

Skocz do:


Użytkownicy przeglądający ten wątek: 3 gości