📄 matrix.c.htm
字号:
</span><span class="line"> 53 </span><span class="sym"></span> <span class="kwb">float</span> <span class="sym">*</span>ans_re<span class="sym">,</span> <span class="kwb">float</span> <span class="sym">*</span>ans_im<span class="sym">)</span><span class="line"> 54 </span><span class="sym">{</span><span class="line"> 55 </span><span class="sym"></span> <span class="slc">// position markers in the output matrix</span><span class="line"> 56 </span><span class="slc"></span> <span class="kwb">long int</span> ans_row<span class="sym">,</span> ans_col<span class="sym">;</span><span class="line"> 57 </span><span class="sym"></span><span class="line"> 58 </span><span class="sym"></span><span class="line"> 59 </span><span class="sym"></span> <span class="slc">// check the matrix dimensions match</span><span class="line"> 60 </span><span class="slc"></span> <span class="kwa">if</span> <span class="sym">(</span>m1_cols <span class="sym">!=</span> m2_rows<span class="sym">)</span><span class="line"> 61 </span><span class="sym"> {</span><span class="line"> 62 </span><span class="sym"></span> printf<span class="sym">(</span><span class="str">"ERROR:</span><span class="esc">\n </span> <span class="str">matrix_mult_f: Matrix dimensions do not match,</span> <span class="esc">\</span><span class="line"> 63 </span><span class="esc"></span><span class="str"> m1_cols and m2_rows must be the same. %d != %d</span><span class="esc">\n</span><span class="str">"</span><span class="sym">,</span><span class="line"> 64 </span><span class="sym"></span> m1_cols<span class="sym">,</span> m2_rows<span class="sym">);</span><span class="line"> 65 </span><span class="sym"></span><span class="line"> 66 </span><span class="sym"></span> exit<span class="sym">(-</span><span class="num">1</span><span class="sym">);</span><span class="line"> 67 </span><span class="sym"> }</span><span class="line"> 68 </span><span class="sym"></span><span class="line"> 69 </span><span class="sym"></span><span class="line"> 70 </span><span class="sym"></span> <span class="kwa">for</span> <span class="sym">(</span> ans_row<span class="sym">=</span><span class="num">0</span><span class="sym">;</span> ans_row <span class="sym"><</span> m1_rows<span class="sym">;</span> ans_row<span class="sym">++ )</span><span class="line"> 71 </span><span class="sym"> {</span><span class="line"> 72 </span><span class="sym"></span> <span class="kwa">for</span> <span class="sym">(</span> ans_col<span class="sym">=</span><span class="num">0</span><span class="sym">;</span> ans_col <span class="sym"><</span> m2_cols<span class="sym">;</span> ans_col<span class="sym">++)</span><span class="line"> 73 </span><span class="sym"> {</span><span class="line"> 74 </span><span class="sym"></span> <span class="slc">// loop variable for next 'for' loop</span><span class="line"> 75 </span><span class="slc"></span> <span class="kwb">int</span> i<span class="sym">;</span><span class="line"> 76 </span><span class="sym"></span><span class="line"> 77 </span><span class="sym"></span><span class="line"> 78 </span><span class="sym"></span> <span class="slc">// work out the "indexes" (pointers to) the</span><span class="line"> 79 </span><span class="slc"></span> <span class="slc">// current element of the answer matrix</span><span class="line"> 80 </span><span class="slc"></span> <span class="kwb">float</span> <span class="sym">*</span>ans_re_addr <span class="sym">=</span> ans_re <span class="sym">+ (</span>ans_row <span class="sym">*</span> m2_cols<span class="sym">) +</span> ans_col<span class="sym">;</span><span class="line"> 81 </span><span class="sym"></span> <span class="kwb">float</span> <span class="sym">*</span>ans_im_addr <span class="sym">=</span> ans_im <span class="sym">+ (</span>ans_row <span class="sym">*</span> m2_cols<span class="sym">) +</span> ans_col<span class="sym">;</span><span class="line"> 82 </span><span class="sym"></span><span class="line"> 83 </span><span class="sym"></span> <span class="slc">// initialise the answer values</span><span class="line"> 84 </span><span class="slc"></span> <span class="sym">*(</span>ans_re_addr<span class="sym">) =</span> <span class="num">0</span><span class="sym">;</span><span class="line"> 85 </span><span class="sym"> *(</span>ans_im_addr<span class="sym">) =</span> <span class="num">0</span><span class="sym">;</span><span class="line"> 86 </span><span class="sym"></span><span class="line"> 87 </span><span class="sym"></span> <span class="kwa">for</span><span class="sym">(</span> i <span class="sym">=</span> <span class="num">0</span><span class="sym">;</span> i <span class="sym"><</span> m1_cols<span class="sym">;</span> i<span class="sym">++)</span><span class="line"> 88 </span><span class="sym"> {</span><span class="line"> 89 </span><span class="sym"></span> <span class="kwb">float</span> m1_re_val<span class="sym">,</span> m1_im_val<span class="sym">;</span><span class="line"> 90 </span><span class="sym"></span> <span class="kwb">float</span> m2_re_val<span class="sym">,</span> m2_im_val<span class="sym">;</span><span class="line"> 91 </span><span class="sym"></span><span class="line"> 92 </span><span class="sym"></span> m1_re_val <span class="sym">= *(</span>m1_re <span class="sym">+ (</span>ans_row <span class="sym">*</span> m1_cols <span class="sym">+</span> i<span class="sym">));</span><span class="line"> 93 </span><span class="sym"></span> m1_im_val <span class="sym">= *(</span>m1_im <span class="sym">+ (</span>ans_row <span class="sym">*</span> m1_cols <span class="sym">+</span> i<span class="sym">));</span><span class="line"> 94 </span><span class="sym"></span><span class="line"> 95 </span><span class="sym"></span> m2_re_val <span class="sym">= *(</span>m2_re <span class="sym">+ (</span>i <span class="sym">*</span> m2_cols <span class="sym">+</span> ans_col<span class="sym">));</span><span class="line"> 96 </span><span class="sym"></span> m2_im_val <span class="sym">= *(</span>m2_im <span class="sym">+ (</span>i <span class="sym">*</span> m2_cols <span class="sym">+</span> ans_col<span class="sym">));</span><span class="line"> 97 </span><span class="sym"></span><span class="line"> 98 </span><span class="sym"> *(</span>ans_re_addr<span class="sym">) += (</span>m1_re_val <span class="sym">*</span> m2_re_val<span class="sym">) - (</span>m1_im_val <span class="sym">*</span> m2_im_val<span class="sym">);</span><span class="line"> 99 </span><span class="sym"> *(</span>ans_im_addr<span class="sym">) += (</span>m1_re_val <span class="sym">*</span> m2_im_val<span class="sym">) + (</span>m1_im_val <span class="sym">*</span> m2_re_val<span class="sym">);</span><span class="line"> 100 </span><span class="sym"> }</span><span class="line"> 101 </span><span class="sym"></span><span class="line"> 102 </span><span class="sym"> }</span><span class="line"> 103 </span><span class="sym"> }</span><span class="line"> 104 </span><span class="sym"></span> <span class="kwa">return</span><span class="sym">;</span><span class="line"> 105 </span><span class="sym">}</span><span class="line"> 106 </span><span class="sym"></span><span class="line"> 107 </span><span class="sym"></span></pre></body></html><!--XHTML generated by highlight 2.2-5, http://www.andre-simon.de/-->
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -