Về cơ bản cho những thứ như thế này (không mã thực):Có an toàn khi nhân một phao/đôi bằng 0,5 thay vì chia cho 2 trong C# và C++ không?
for(int i = 0; i < 1000000000; ++i)
{
Vert v0 = mesh.polygons[i].edges[0].vert0;
Vert v1 = mesh.polygons[i].edges[0].vert1;
Vector3 center = (v0.pos + v1.pos)/2;
}
v0.pos
là loại Vector3<float, float, float>
, nhưng có thể Vector3<double, double, double>
.
có an toàn không chỉ làm ?:
Vector3 center = (v0.pos + v1.pos) * 0.5;
này có vẻ như tối ưu hóa sớm nhưng điều này có được càng nhanh càng tốt sẽ được kêu gọi hàng tỷ điểm (đám mây điểm).
Điều gì sẽ xảy ra khi bạn đo lường hiệu suất của cả hai lựa chọn? Bạn không thể nói về tối ưu hóa ở cấp độ này mà không có * đo * kết quả trên nền tảng mục tiêu của bạn. –
Đo lường theo cách này. Nhưng trình biên dịch của bạn 'nên' đã hoàn nguyên về bit-shifting để chia cho 2. – CaffGeek
Đồng ý với Greg. Ngoài ra, hãy nhớ rằng bạn nên tập trung vào tính đúng đắn trước tốc độ.Phần lớn thời gian, trình biên dịch sẽ tối ưu hóa phần lớn điều này cho bạn (đặc biệt là khi bạn sử dụng chữ). – TheBuzzSaw