Wpis z mikrobloga

Od rana z supportem Mathworks na telefonie. Problem dotyczy wersji 2019b (nowszych jeszcze nie sprawdzałem), 2017b działa OK. Mamy sobie dwie macierze.

a = [1, -8.392077756813356, 31.320231244770135, -68.227489240094530, 95.601443589819910, -89.357015966890490, 55.711712360873710, -22.341815453118137, 5.229278595243435, -0.544267372579095]
b = [1,1,1,1,1,1,1,1,1,1]

No i wykonujemy operacje:

c(1) = a*b(:)
c(2) = sum(a.*b)
W 2017b jest OK, w 2019b mamy dwa różne wyniki.
c(1) = 1.211586386773433e-09
c(2) = 1.211586164728828e-09


#matlab #programowanie
motoinzyniere - Od rana z supportem Mathworks na telefonie. Problem dotyczy wersji 20...

źródło: comment_1623836051E2KKkqkAJE2sjCAUnAFN3L.jpg

Pobierz
  • 16
@motoinzyniere: Jest jeszcze śmieszniej, bo się przyjrzałem co ja dostałem xD

a = [1, -8.392077756813356, 31.320231244770135, -68.227489240094530, 95.601443589819910, -89.357015966890490, 55.711712360873710, -22.341815453118137, 5.229278595243435, -0.544267372579095]
b = [1,1,1,1,1,1,1,1,1,1]

a*b(:)
1.21158549859501e-09

sum(a.*b)
1.21158572063962e-09

Jeśli wszystko się dobrze przenosiło, bo kopiuję z telefonu na kompa przez pastebin i na odwrót, to mamy inne wyniki liczbowe xDDDD
@motoinzyniere: Daj znać jak coś wymyślą, bo mam z tego bekę xD

Nie wiem oczywiście co się zmieniło w kodzie Matlaba, ale przetestowałem to sobie na pythonie. Jest różnica przy przechowywaniu danych jako double a long double. Podejrzewam, że tutaj jest grane coś podobnego, gdzie wkrada się błąd precyzji liczb zmiennoprzecinkowych do tablicy b z jedynkami, a pewnie też i tablicy a. Po drodze pewnie są różne konwersje danych. Mieli lepiej