我正在尝试解决分数背包问题。
我必须找到每重量最大卡路里的物品。我将我的包装满了最大卡路里的定义/有限重量。
虽然算法是真的,但由于python划分怪异,我找不到真正的结果
当我尝试找到每重量最大卡路里(python3)的物品时
print ((calories_list[i]/weight_list[i])*10)
# calories[i] 500 and weight[i] 30 (they're integers)
166.66666666666669
另一方面,我打开终端并键入python3
>>> 500/30
16.666666666666668
#when multiply with 10, it must be 16.666666666666668 not
#166.66666666666669
如你所见,它会给出不同的结果
最重要的是,重要的是真正的答案
500/30=16.6666666667
两天前我被困在这里,请帮帮我
谢谢你
答案 0 :(得分:0)
正如Python FAQ:
中所述CPython中的float类型使用C double进行存储。 float对象的值以固定精度(通常为53位)存储在二进制浮点中,Python使用C操作,而C操作又依赖于处理器中的硬件实现来执行浮点运算。这意味着就浮点运算而言,Python的行为与许多流行语言一样,包括C和Java。
您可以使用decimal
模块替代:
>>> from decimal import Decimal
>>> Decimal(500)/Decimal(30)
Decimal('16.66666666666666666666666667')