2015-07-10 57 views
-2

例如,如果我有一个C++函数有这么多的浮点运算(例如:division,sqrt,sin,cos ...)但没有rand(),我可以确保它会得到相同的结果android和iOS版?在android和iOS中C++浮点计算是否一致?

例如,将函数findValue(123.456)返回在android中的3.52111,但在iOS中返回3.52205?

回答

1

它们不必一致,因为C++没有强制使用特定的浮点类型。

(虽然,往往不是一个浮点双将是IEEE754类型:经Java中的一个坚持)

如果您在您的源行

static_assert(std::numeric_limits<double>::is_iec559, "Not IEEE754");

代码,那么如果浮点数不是您所期望的那么编译将会失败。在没有断言的情况下,您可以确信算术运算将非常相似。

+0

IIRC实际真正的IEEE754相当罕见。不过,IEEE754 _format_无处不在。 – MSalters

0

不会。即使您拥有完全符合IEEE754标准的double,也只是保证+ -/*和sqrt对最后一位是正确的。 sincos通常有错误,但对于sin(123.456),这些错误仍然相当小。但如果sin(123456.789)是正确的,那将是一个惊喜。