CO538 Anonymous Questions and Answers Keyword Index |
This page provides a keyword index to questions and answers. Clicking on a keyword will take you to a page containing all questions and answers for that keyword, grouped by year.
To submit a question, use the anonymous questions page. You may find the keyword index and/or top-level index useful for locating past questions and answers.
Keyword reference for shift
2007 |
Submission reference: IN1372
Hi,
I'm changing the compute.speed
function, but I had some trouble
understanding the first one. Can you explain the code below because I can't
find any explanations for the operators?
IF i = 0 FOR 7 range <= (robot.radius << i) speed := i
Cheers.
The left and right shift operators,
<<
and >>
,
are defined is slide 33 of basics and
in section 2.2 ("Built-in Operators") of the
occam-pi Quick Reference Wiki, which is linked from this module's web page.
See also Question 42 (2007), which observes that shifting the bit-pattern of a positive integer leftwards multiplies it by 2 for each bit shifted. So, expanding the above replicator fully (it's only 7 times) and replacing the shifts with equivalent multiplies, we get:
IF range <= (robot.radius * 1) speed := 0 range <= (robot.radius * 2) speed := 1 range <= (robot.radius * 4) speed := 2 range <= (robot.radius * 8) speed := 3 range <= (robot.radius * 16) speed := 4 range <= (robot.radius * 32) speed := 5 range <= (robot.radius * 64) speed := 6
So long as range
is not more than 64 times
the radius of the robot, a speed
will be assigned.
In brain.0
, that range
is
the minimum clear distance reported by the laser scanner.
It sets the speed on a logarithmic scale, stopping it if it's bumped
into something.
The greatest value the laser scanner can return is the length of
its rays (see the variable laser.range
in the main
process).
In that main
process, laser.range
is
set to 32 times the robot.radius
– so the above
code is safe.
If you change that ratio, you may need to protect that replicated
IF
– see Question 30 (2007).
Keywords: cylons , operators , shift
This work is licensed under a Creative Commons Attribution-Share Alike 3.0 Unported License. |