例如,如果我有一个C++函数有这么多的浮点运算(例如:division,sqrt,sin,cos ...)但没有rand(),我可以确保它会得到相同的结果android和iOS版?在android和iOS中C++浮点计算是否一致?
例如,将函数findValue(123.456)返回在android中的3.52111,但在iOS中返回3.52205?
例如,如果我有一个C++函数有这么多的浮点运算(例如:division,sqrt,sin,cos ...)但没有rand(),我可以确保它会得到相同的结果android和iOS版?在android和iOS中C++浮点计算是否一致?
例如,将函数findValue(123.456)返回在android中的3.52111,但在iOS中返回3.52205?
它们不必一致,因为C++没有强制使用特定的浮点类型。
(虽然,往往不是一个浮点双将是IEEE754类型:经Java中的一个坚持)
如果您在您的源行
static_assert(std::numeric_limits<double>::is_iec559, "Not IEEE754");
代码,那么如果浮点数不是您所期望的那么编译将会失败。在没有断言的情况下,您可以确信算术运算将非常相似。
不会。即使您拥有完全符合IEEE754标准的double
,也只是保证+ -/*和sqrt
对最后一位是正确的。 sin
和cos
通常有错误,但对于sin(123.456)
,这些错误仍然相当小。但如果sin(123456.789)
是正确的,那将是一个惊喜。
IIRC实际真正的IEEE754相当罕见。不过,IEEE754 _format_无处不在。 – MSalters