2014-02-13 3 views
1

согласно моей книге, ввод 5 и 6.5 в эту функцию должен возвращать 73.6901. Тем не менее, я продолжаю получать 72.6901. Я знаю, что формула прекрасна, я не могу представить, что еще может быть. Есть ли определенная степень неточности с поплавками, которые могут вызывать эту логическую ошибку?Расчет поплавка всегда отключен на 1

import math 

def area(n, side): 
    area= (n * (side * side))/(
     4 * math.tan(math.pi/n)) 
    return area 

def main(): 

    sideNumber = int(input("Enter the number of sides :")) 
    sideLength = float(input("Enter the side: ")) 


    print("The area of the polygon is %f" %(area(sideNumber, sideLength))) 


if __name__ == "__main__": 
    main() 
+3

Нет, что-то, что совсем не похоже на 1, вряд ли будет ошибкой с плавающей точкой. Скорее всего, это опечатка в книге. – mgilson

+1

Не верьте всему, что вы читаете –

ответ

5

Похоже, что это опечатка в книге. Я просто переписываются другую формулу для одного и того же от mathwords:

def area2(n, side): 
    r = 0.5 * side * (math.cos(math.pi/n)/math.sin(math.pi/n)) 
    return n * r * r * math.tan(math.pi/n) 

И я также получаю 72.690170.

+1

Ваша причина прекрасна, но ваша _different formula_ просто проверяет 'sin (n)/cos (n) = tan (n)'. – devnull

0

Правильный ответ 72.6901, и ваша книга, вероятно, имеет опечатку.

Неточность с плавающей точкой не должна быть такой большой. Обычно его единственное значение будет иметь большое значение после десятичных знаков после точки.

Смежные вопросы