Tôi có một hàm nhân hai ma trận A và B rồi in kết quả. Tôi nhận được hai kết quả đầu ra khác nhau khi chạy chương trình theo hai cách tương tự.đối số được đảo ngược cho hàm C
đầu tiên:
FILE *f;
f = fopen("in.txt","r");
struct Mat* A = read_mat(f);
struct Mat* B = read_mat(f);
print_mat(mat_mul_1(A, B));
đầu ra là nhân chính xác của
A * B
thứ hai:
FILE *f;
f = fopen("in.txt","r");
print_mat(mat_mul_1(read_mat(f), read_mat(f)));
đầu ra là chính xác nhân của
B * Một
Tôi muốn biết lý do tại sao các đối số đã bị đảo ngược?!
(như chức năng 'mat_mul_1' là một hộp đen)
Bạn có thể cho tôi biết tại sao trình biên dịch sẽ thay đổi thứ tự của các đối số? như tôi thấy rằng nó tốt hơn để luôn luôn đánh giá nó từ trái sang phải vì nó đã ra lệnh –
không thực sự nó không nhất thiết phải "tốt hơn". Ví dụ, giả thuyết, nó có thể nhanh hơn để đẩy công cụ trên ngăn xếp trái sang phải và đánh giá kết quả dưới lên (vì vậy về cơ bản ngược lại). vấn đề là nếu đọc các vấn đề bạn nên đọc một cách rõ ràng. –
@ M.ElSaka: Trình biên dịch nội bộ chuyển đổi một biểu thức thành một loại cấu trúc cây nhị phân, trong đó mỗi toán hạng tạo thành một "lá". Sau đó nó có thể đánh giá cây này bắt đầu từ lá bên trái hoặc bên phải nhất. Cái nào hiệu quả hơn trên một nền tảng cụ thể không rõ ràng, nếu nó quan trọng. Đây là lý do tại sao nó là hành vi không xác định. – Lundin