Hi,

I think matrix operator * is not correctly implemented in the single
precision case. I don't think my problem is only a numerical error linked
with floating point nature.

When I execute this octave script :

A = single([ 12545.125, 134587.125;
         1247.12463378906, 63789.125])

B = single([ 12.2130002975464, 547854.8125;
  4521.78955078125, 2145.14770507812])

C_single = single(A) * single(B)
C_double = double(A) * double(B)

C_double_2_2_calculated = C_double(2, 2)
C_single_2_2_calculated = C_single(2, 2)

C_double_2_2_theorical = double(A(2,1)) * double(B(1,2)) + double(A(2,2)) *
double(B(2,2))
C_single_2_2_theorical = single(A(2,1)) * single(B(1,2)) + single(A(2,2)) *
single(B(2,2))

I can see these results :

octave:9> script
A =

             12545.125            134587.125
      1247.12463378906             63789.125

B =

      12.2130002975464           547854.8125
      4521.78955078125      2145.14770507812

C_single =

             608727872            7161616384
             288456224             820080320

C_double =

      608727869.110048      7161616366.99088
      288456230.012003       820080327.51133

C_double_2_2_calculated =      820080327.51133
C_single_2_2_calculated =           * 820080320*
C_double_2_2_theorical =      820080327.51133
C_single_2_2_theorical =           * 820080384*

We can see there is no error with float64 numbers but it isn't the same case
with float32 using.

Last information, my octave version is the following :

octave:11> version
ans = 3.2.3

Best regards,
Nicolas from France
------------------------------------------------------------------------------
Start uncovering the many advantages of virtual appliances
and start using them to simplify application deployment and
accelerate your shift to cloud computing.
http://p.sf.net/sfu/novell-sfdev2dev
_______________________________________________
Octave-dev mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/octave-dev

Reply via email to