Skip to content

Inconclusive Termination of rather simple float loop #180

@cloerkes

Description

@cloerkes

Hi, I want to prove termination of the following C function:

int main()
{
  float x = 1.4E-45;

  while (x <= 3.4028233E38) {
    x *= 2.0;
  }
  
  return x;
}

I use the command ./2ls-binary --all-functions --termination ../c_examples/main.c, where 2ls-binary is of version 0.10.0 (drawn precompiled from the last SV-COMP). 2LS answers:

** Termination:
[main]: unknown
[__CPROVER_initialize]: yes
[__CPROVER__start]: unknown
VERIFICATION INCONCLUSIVE

Is there an adaption to the command that enables a succesfull termination proof in this case? I observed that termination can be proven for smaller thresholds (e.g. 8.0E37 instead of 3.4028233E38, which is the maximal finite float value). However, this behaviour is not monotonic: For the even smaller threshold 4.0E37, termination cannot be shown.

Thanks for your help in advance!

Metadata

Metadata

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions