我已经阅读了很多问题和评论,但是没有看到这一点,并且由于其他人可能有相同的问题,我会在这里发布。
考虑到浮点错误,是否有可能从ceil($a / $b)
得到比$a / $b
更高的结果,其中$a % $b
的其余部分为0?
如果是这样,因为我正在使用高于0的正整数,或许我应该写my_ceil(),我先检查[/quote]
,如果它不是0,则加0.1到在调用内置函数之前$ a ...
答案 0 :(得分:1)
如果你似乎在询问如何使用浮点数(包括正确的非绝对错误)来决定ceil
结果,以下内容应该指导你:
1)http://www.php.net/manual/en/language.types.float.php
可以完全表示为浮点的有理数 基数10中的数字,如0.1或0.7,没有确切的数字 表示为使用的基数2中的浮点数 在内部,无论尾数的大小。因此,他们不可能 转换成内部二进制对应物而没有少量损失 精度这可能会导致令人困惑的结果:例如, floor((0.1 + 0.7)* 10)通常会返回7而不是预期的8, 因为内部表示将是类似的 7.9999999999999991118 ....
所以永远不要将浮点数结果信任到最后一位数,而则不要 直接比较浮点数是否相等 [我的重点]。如果更高 精度是必要的,任意精度数学函数和gmp函数都可用。
阅读
任意精确数学函数:http://uk1.php.net/manual/en/ref.bc.php
gmp :http://uk1.php.net/manual/en/ref.gmp.php
2)当使用ceil($float)
时,你正在关注浮点数(作为单个输入值)当 ceil只会向上舍入到最接近的整数时,无论浮动值是什么,是无关。您可能正在考虑使用round()
功能。它有自己处理上述浮点不准确问题的方法。
http://php.net/manual/en/function.round.php
要回答考虑浮点错误的原始问题,是否有可能从ceil($a / $b)
获得比$a / $b
更高的结果,其中{% set theme = theme|merge({assets: theme.assets|merge({ libs: theme.assets.libs|merge(['otherlibrary', 'anotherlibrary']) }) }) %}
的其余部分为0 ?答案是肯定的,因为有两点:
浮动在base10数字中可能非常不准确,
您使用了错误的函数来获得所需的输出所需的精度。在这种使用多个浮点数的情况下,您需要一个内置精度的函数,例如gmp或maths functions。
答案 1 :(得分:0)
查看github上的ceil source code,它似乎依赖于你的C库的ceil函数。
答案 2 :(得分:0)
编辑:回答问题 - 是的,它(可能)可以。
我想这与ceil()没有任何关系,而是如果有问题的除法返回浮点数或整数类型值。
根据http://php.net/manual/en/language.operators.arithmetic.php ...
除法运算符(" /")返回一个浮点值,除非两个操作数是整数(或转换为整数的字符串)并且数字是可分的,在这种情况下整数值将是被退回。
因此,使用至少一个浮点值可能会产生ceil()"错误",但我应该没有两个整数。