2011-09-18 39 views
5

Ok, điều này có vẻ giống như một câu hỏi lạ nhưng nó là một câu hỏi thú vị. Tôi đang mã hóa cho iOS và đã được thông báo rằng tốt nhất là nên nhân rộng hơn là chia giá trị vì nó nhanh hơn.Chia nhỏ hơn Multiply?

Tôi biết rằng các bộ vi xử lý những ngày này có thể làm cho điều này không thành vấn đề nhưng sự tò mò của tôi đã tốt hơn và tôi tự hỏi liệu có ai có thể làm sáng tỏ điều này cho tôi không.

SO ..... Câu hỏi của tôi là thế này -
là:

player.position = ccp(player.contentSize.width/2, winSize.height/2); 

chậm hơn:

player.position = ccp(player.contentSize.width * 0.5, winSize.height * 0.5); 
+1

Những thứ đó không giống nhau, trừ khi 'player.contentSize.width' và' winSize.height' là số dấu phẩy động. – icktoofay

+1

Nếu 'player.contentSize.width' và' winSize.height' là số nguyên, làm thế nào về bit chuyển cho tốc độ? –

+2

Vì mã này gần như chắc chắn không nằm trong một vòng lặp quan trọng về hiệu năng, gần như chắc chắn không quan trọng cho dù bạn phân chia hay nhân lên. Chỉ cần tập trung vào viết mã rõ ràng, ngắn gọn và mạnh mẽ và chỉ lo lắng về hiệu suất khi bạn thực sự cần. –

Trả lời

4

Trên hầu hết các bộ xử lý phân chia chậm hơn phép nhân cho cùng một kiểu dữ liệu. Trong ví dụ của bạn phép nhân của bạn là một hoạt động dấu chấm động, nếu widthheight là các loại số nguyên, kết quả có thể rất khác nhau và có thể phụ thuộc vào cả bộ xử lý và trình biên dịch của bạn. Tuy nhiên, hầu hết các trình biên dịch (chắc chắn GCC) sẽ dịch một bộ phận bằng một sức mạnh liên tục-hai như trong ví dụ của bạn, sang một sự dịch chuyển đúng nơi sẽ hiệu quả hơn. Điều đó thường sẽ nhanh hơn hoặc là nhân hoặc chia.

7

Vâng, bộ phận thường nhiều chậm hơn so với phép nhân.

Tuy nhiên, khi chia cho các chữ (hoặc bất kỳ thứ gì có thể được xác định là hằng số tại thời gian biên dịch), trình biên dịch thường sẽ tối ưu hóa phần chia.

+1

Bởi "literals như thế", ông có nghĩa là quyền hạn của 2. Sau đó, nó chỉ là chuyển dịch. – UncleO

+1

Trình biên dịch cũng có thể tối ưu hóa phân chia theo 3, 5 và các số nhỏ khác. Nếu chế độ dấu phẩy động được thả lỏng, bộ phận FP sẽ được thay thế bằng phép nhân theo nghịch đảo. – Mysticial

0

Nhân lên đến một mức độ nhất định có thể được thực hiện song song, nếu bạn có thể sử dụng hoặc sử dụng phép nhân.

Các vấn đề liên quan