Điều này question thể hiện một hiện tượng rất thú vị: denormalized phao làm chậm mã nhiều hơn một bậc độ lớn.Tại sao MSVS không tối ưu hóa +0? Thay vào đó, nó biến nó thành một phao không chuẩn hóa?
Hành vi này được giải thích rõ trong số accepted answer. Tuy nhiên, có một nhận xét, hiện tại có 48 phiếu bầu, tôi không thể tìm thấy câu trả lời thỏa đáng cho:
Tại sao trình biên dịch không thả +/- 0 trong trường hợp này?!? - Michael Dorgan
Side lưu ý: Tôi có ấn tượng rằng 0f là/phải chính xác biểu diễn (hơn nữa - đó là biểu diễn nhị phân phải tất cả zero), nhưng không thể tìm thấy như một tuyên bố trong tiêu chuẩn c11. Một báo giá chứng minh điều này, hoặc lập luận bác bỏ tuyên bố này, sẽ được chào đón nhiều nhất. Bất kể, Câu hỏi của Michael là câu hỏi chính ở đây.
An thực hiện có thể cung cấp cho zero và giá trị mà không phải là dấu chấm động số (ví dụ như infinities và Nans) là một dấu hiệu hoặc có thể để lại cho họ unsigned.
Điều này được trả lời trong một trong những nhận xét cuối cùng trong [câu trả lời] (http://stackoverflow.com/a/9314926/12711) cho câu hỏi được liên kết: "@ s73v3r: + 0.f không thể được tối ưu hóa bởi vì dấu phẩy động có 0 âm và kết quả của việc thêm + 0.f vào -.0f là + 0.f. Vì vậy, việc thêm 0.f không phải là một hoạt động nhận dạng và không thể được tối ưu hóa.- Eric Postpischil " –
Và để được rõ ràng - nó không phải là' + 0.f' hoặc '-0.f' được denormalized - đó là giá trị trong mảng mà số không được thêm vào đó là không chuẩn hóa (và gây ra sự chậm lại –
@Michael Burr, xem bản chỉnh sửa của tôi.Bằng cách này, bạn có nghĩ rằng bản in nhỏ trong câu hỏi là chính xác không? Hoặc tôi có nên hỏi câu hỏi này là một câu hỏi riêng không? – Vorac