integer and identity code

3 次查看(过去 30 天)
Can you guys help me with this one?
Thanks
  1 个评论
Roger Stafford
Roger Stafford 2017-2-2
编辑:Roger Stafford 2017-2-2
In case it is a mystery to you why the described percentage is not one hundred percent, it should be realized that if x is any integer other than a power of two, the reciprocal 1/x cannot be achieved exactly in the binary numbers, which your computer uses, with a finite number of binary digits and must therefore approximate that reciprocal by rounding. It is then a matter of chance whether the multiplication x*(1/x) will turn out to be exactly one or off by some tiny amount.

请先登录,再进行评论。

采纳的回答

Star Strider
Star Strider 2017-2-2
It seems straightforward. Use the ‘double equal’ operator == to test for equality.
A 1 means the condition is met, a 0 indicates it was not. To understand the nature of the problem (if it’s not already been explained to you) see Why is 0.3 - 0.2 - 0.1 (or similar) not equal to zero? (link).
  7 个评论
John Jamison
John Jamison 2017-2-3
I still don't get why its not just (1 ./ 1:N)?
thanks
Star Strider
Star Strider 2017-2-3
The problem in the ‘Screen Shot 2017-02-01 at 5.55.24 PM.png’ that you posted wants to calculate: x*(1/x) and test to see if it equals 1. That is the reason it’s not just 1./[1:N].

请先登录,再进行评论。

更多回答(1 个)

Image Analyst
Image Analyst 2017-2-2
How about a simple for loop? Here's a start
equalityCount = 0;
for i = 1 : 100000
if i * (1/i) == 1
I trust you can finish it. I get 86884 = 86.884% Empirically it seems to be higher than the theoretical number Roger suggests. Not sure why.
>> format long
>> 17 * (1/17)
ans =
1
>> 17 * (1/17) == 1
ans =
logical
1

类别

Help CenterFile Exchange 中查找有关 Logical 的更多信息

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by