Хорошо, вот моя проблема. Я написал расширенную программу по теореме Пифагора, но, по-видимому, у нее есть исключения. Вот пример моей проблемы. Когда я ввожу A? √(3)
и B? 2
, я получаю 0
обратно. Вот код:
:Prompt A,C
:(C^2-A^2)->B
:If B<0
:Then
:Disp "THAT IS N
OT A VALID TRIA
ANGLE
:Else
:If iPart(√(B))≠
√(B)
:Then
:Disp "B = √(",B
:Else
:Disp "B = ",√(B)
:End
:End
Следовательно, если B = 1, то гипотетически он должен выводить B = 1
, но вместо этого выводит:
A=? √(3)
C=? 2
B = √(
1
Done
Что я делаю неправильно и как я могу это исправить?
iPart(
иint(
не имеют к этой проблеме никакого отношения; вместо этого проблема заключается в ошибке округления калькулятора. Во второй строке вы сохраняете 4-√(3)² в B. Поскольку калькулятор округляет √(3) как десятичную дробь, √(3)² становится чуть больше 3, поэтому 4-√(3)² становится чем-то вроде 0,9999999999. ВзявiPart(
из этого, вы получите 0, что вызовет проблему. - person user3932000   schedule 01.02.2015