#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
double pow(double, double);
double find_number(long *vector, long lengthvector) {
  double N = 0.0, Nexp = 0.0;
  long i, ie, ids, cnt;
  ie = -1;
  i = 0;
  do {
    if (vector[i] == 69 || vector[i] == 101)
      ie = i;
    i++;
  } while (ie == -1 && i < lengthvector);
  if (ie == -1)
    ie = lengthvector;
  ids = -1;
  i = 0;
  do {
    if (vector[i] == 46)
      ids = i;
    i++;
  } while (ids == -1 && i < lengthvector);
  if (ids == -1 && ie > -1)
    ids = ie;
  if (ids == -1)
    ids = lengthvector;
  cnt = 0;
  for (i = ids - 1; i >= 0; i--) {
    if (vector[i] >= 48 && vector[i] <= 57) {
      N += (double)(vector[i] - 48) * pow(10.0, (double)cnt);
      cnt++;
    }
  }
  cnt = -1;
  for (i = ids + 1; i <= ie - 1; i++) {
    if (vector[i] >= 48 && vector[i] <= 57) {
      N += (double)(vector[i] - 48) * pow(10.0, (double)cnt);
      cnt--;
    }
  }
  cnt = 0;
  for (i = lengthvector - 1; i >= ie + 1; i--) {
    if (vector[i] >= 48 && vector[i] <= 57) {
      Nexp += (double)(vector[i] - 48) * pow(10.0, (double)cnt);
      cnt++;
    }
  }
  if (ie < lengthvector - 1) {
    if (vector[ie + 1] == 45)
      Nexp *= (-1.);
  }
  N = N * pow(10.0, Nexp);
  if (vector[0] == 45)
    N *= (-1.);
  return (N);
}


x86 assembly (clang, -O0):
<find_number>:
push   %rbp
mov    %rsp,%rbp
sub    $0x70,%rsp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x18(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x20(%rbp)
movq   $0xffffffffffffffff,-0x30(%rbp)
ff
movq   $0x0,-0x28(%rbp)
mov    -0x8(%rbp),%rax
mov    -0x28(%rbp),%rcx
cmpq   $0x45,(%rax,%rcx,8)
je     1166 <find_number+0x56>
mov    -0x8(%rbp),%rax
mov    -0x28(%rbp),%rcx
cmpq   $0x65,(%rax,%rcx,8)
jne    116e <find_number+0x5e>
mov    -0x28(%rbp),%rax
mov    %rax,-0x30(%rbp)
mov    -0x28(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x28(%rbp)
xor    %eax,%eax
cmpq   $0xffffffffffffffff,-0x30(%rbp)
mov    %al,-0x41(%rbp)
jne    1198 <find_number+0x88>
mov    -0x28(%rbp),%rax
cmp    -0x10(%rbp),%rax
setl   %al
mov    %al,-0x41(%rbp)
mov    -0x41(%rbp),%al
test   $0x1,%al
jne    1140 <find_number+0x30>
cmpq   $0xffffffffffffffff,-0x30(%rbp)
jne    11b6 <find_number+0xa6>
mov    -0x10(%rbp),%rax
mov    %rax,-0x30(%rbp)
movq   $0xffffffffffffffff,-0x38(%rbp)
ff
movq   $0x0,-0x28(%rbp)
mov    -0x8(%rbp),%rax
mov    -0x28(%rbp),%rcx
cmpq   $0x2e,(%rax,%rcx,8)
jne    11e1 <find_number+0xd1>
mov    -0x28(%rbp),%rax
mov    %rax,-0x38(%rbp)
mov    -0x28(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x28(%rbp)
xor    %eax,%eax
cmpq   $0xffffffffffffffff,-0x38(%rbp)
mov    %al,-0x42(%rbp)
jne    120b <find_number+0xfb>
mov    -0x28(%rbp),%rax
cmp    -0x10(%rbp),%rax
setl   %al
mov    %al,-0x42(%rbp)
mov    -0x42(%rbp),%al
test   $0x1,%al
jne    11c6 <find_number+0xb6>
cmpq   $0xffffffffffffffff,-0x38(%rbp)
jne    1234 <find_number+0x124>
cmpq   $0xffffffffffffffff,-0x30(%rbp)
jle    1234 <find_number+0x124>
mov    -0x30(%rbp),%rax
mov    %rax,-0x38(%rbp)
cmpq   $0xffffffffffffffff,-0x38(%rbp)
jne    1247 <find_number+0x137>
mov    -0x10(%rbp),%rax
mov    %rax,-0x38(%rbp)
movq   $0x0,-0x40(%rbp)
mov    -0x38(%rbp),%rax
sub    $0x1,%rax
mov    %rax,-0x28(%rbp)
cmpq   $0x0,-0x28(%rbp)
jl     12f5 <find_number+0x1e5>
mov    -0x8(%rbp),%rax
mov    -0x28(%rbp),%rcx
cmpq   $0x30,(%rax,%rcx,8)
jl     12df <find_number+0x1cf>
mov    -0x8(%rbp),%rax
mov    -0x28(%rbp),%rcx
cmpq   $0x39,(%rax,%rcx,8)
jg     12df <find_number+0x1cf>
mov    -0x8(%rbp),%rax
mov    -0x28(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
sub    $0x30,%rax
cvtsi2sd %rax,%xmm0
movsd  %xmm0,-0x50(%rbp)
cvtsi2sdq -0x40(%rbp),%xmm1
movsd  0xd54(%rip),%xmm0
call   1030 <pow@plt>
movaps %xmm0,%xmm2
movsd  -0x50(%rbp),%xmm0
movsd  -0x18(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x18(%rbp)
mov    -0x40(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x40(%rbp)
jmp    12e4 <find_number+0x1d4>
mov    -0x28(%rbp),%rax
add    $0xffffffffffffffff,%rax
mov    %rax,-0x28(%rbp)
jmp    125b <find_number+0x14b>
movq   $0xffffffffffffffff,-0x40(%rbp)
ff
mov    -0x38(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x28(%rbp)
mov    -0x28(%rbp),%rax
mov    -0x30(%rbp),%rcx
sub    $0x1,%rcx
cmp    %rcx,%rax
jg     13ad <find_number+0x29d>
mov    -0x8(%rbp),%rax
mov    -0x28(%rbp),%rcx
cmpq   $0x30,(%rax,%rcx,8)
jl     1397 <find_number+0x287>
mov    -0x8(%rbp),%rax
mov    -0x28(%rbp),%rcx
cmpq   $0x39,(%rax,%rcx,8)
jg     1397 <find_number+0x287>
mov    -0x8(%rbp),%rax
mov    -0x28(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
sub    $0x30,%rax
cvtsi2sd %rax,%xmm0
movsd  %xmm0,-0x58(%rbp)
cvtsi2sdq -0x40(%rbp),%xmm1
movsd  0xc9c(%rip),%xmm0
call   1030 <pow@plt>
movaps %xmm0,%xmm2
movsd  -0x58(%rbp),%xmm0
movsd  -0x18(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x18(%rbp)
mov    -0x40(%rbp),%rax
add    $0xffffffffffffffff,%rax
mov    %rax,-0x40(%rbp)
jmp    139c <find_number+0x28c>
mov    -0x28(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x28(%rbp)
jmp    1309 <find_number+0x1f9>
movq   $0x0,-0x40(%rbp)
mov    -0x10(%rbp),%rax
sub    $0x1,%rax
mov    %rax,-0x28(%rbp)
mov    -0x28(%rbp),%rax
mov    -0x30(%rbp),%rcx
add    $0x1,%rcx
cmp    %rcx,%rax
jl     1465 <find_number+0x355>
mov    -0x8(%rbp),%rax
mov    -0x28(%rbp),%rcx
cmpq   $0x30,(%rax,%rcx,8)
jl     144f <find_number+0x33f>
mov    -0x8(%rbp),%rax
mov    -0x28(%rbp),%rcx
cmpq   $0x39,(%rax,%rcx,8)
jg     144f <find_number+0x33f>
mov    -0x8(%rbp),%rax
mov    -0x28(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
sub    $0x30,%rax
cvtsi2sd %rax,%xmm0
movsd  %xmm0,-0x60(%rbp)
cvtsi2sdq -0x40(%rbp),%xmm1
movsd  0xbe4(%rip),%xmm0
call   1030 <pow@plt>
movaps %xmm0,%xmm2
movsd  -0x60(%rbp),%xmm0
movsd  -0x20(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x20(%rbp)
mov    -0x40(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x40(%rbp)
jmp    1454 <find_number+0x344>
mov    -0x28(%rbp),%rax
add    $0xffffffffffffffff,%rax
mov    %rax,-0x28(%rbp)
jmp    13c1 <find_number+0x2b1>
mov    -0x30(%rbp),%rax
mov    -0x10(%rbp),%rcx
sub    $0x1,%rcx
cmp    %rcx,%rax
jge    14a5 <find_number+0x395>
mov    -0x8(%rbp),%rax
mov    -0x30(%rbp),%rcx
cmpq   $0x2d,0x8(%rax,%rcx,8)
jne    14a0 <find_number+0x390>
movsd  0xb6a(%rip),%xmm0
mulsd  -0x20(%rbp),%xmm0
movsd  %xmm0,-0x20(%rbp)
jmp    14a5 <find_number+0x395>
movsd  -0x18(%rbp),%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x20(%rbp),%xmm1
movsd  0xb4c(%rip),%xmm0
call   1030 <pow@plt>
movaps %xmm0,%xmm1
movsd  -0x68(%rbp),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x18(%rbp)
mov    -0x8(%rbp),%rax
cmpq   $0x2d,(%rax)
jne    14f2 <find_number+0x3e2>
movsd  0xb18(%rip),%xmm0
mulsd  -0x18(%rbp),%xmm0
movsd  %xmm0,-0x18(%rbp)
movsd  -0x18(%rbp),%xmm0
add    $0x70,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<find_number>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x38,%rsp
mov    %rdi,%r15
cmp    $0x2,%rsi
mov    $0x1,%eax
cmovge %rsi,%rax
xor    %r12d,%r12d
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
mov    (%r15,%r12,8),%rcx
or     $0x20,%rcx
cmp    $0x65,%rcx
je     115a <find_number+0x4a>
add    $0x1,%r12
cmp    %r12,%rax
jne    1140 <find_number+0x30>
mov    %rsi,%r12
xor    %eax,%eax
nopl   0x0(%rax)
cmpq   $0x2e,(%r15,%rax,8)
mov    %rax,%rcx
je     1171 <find_number+0x61>
mov    $0xffffffffffffffff,%rcx
cmp    $0xffffffffffffffff,%rcx
jne    1180 <find_number+0x70>
add    $0x1,%rax
cmp    %rsi,%rax
jl     1160 <find_number+0x50>
test   %r12,%r12
mov    %rcx,%r13
cmovns %r12,%r13
cmp    $0xffffffffffffffff,%rcx
cmovne %rcx,%r13
cmp    $0xffffffffffffffff,%r13
cmove  %rsi,%r13
test   %r13,%r13
mov    %rsi,0x28(%rsp)
jle    1210 <find_number+0x100>
cmp    $0x1,%r13
jne    1371 <find_number+0x261>
xorpd  %xmm0,%xmm0
xor    %r14d,%r14d
mov    %r13,%rbp
test   $0x1,%r13b
je     1214 <find_number+0x104>
mov    -0x8(%r15,%rbp,8),%rax
add    $0xffffffffffffffd0,%rax
cmp    $0x9,%rax
ja     1214 <find_number+0x104>
xorps  %xmm1,%xmm1
cvtsi2sd %rax,%xmm1
movsd  %xmm1,0x10(%rsp)
xorps  %xmm1,%xmm1
cvtsi2sd %r14,%xmm1
movapd %xmm0,(%rsp)
movsd  0xe10(%rip),%xmm0
call   1030 <pow@plt>
mulsd  0x10(%rsp),%xmm0
movapd (%rsp),%xmm1
addsd  %xmm0,%xmm1
movapd %xmm1,(%rsp)
movapd (%rsp),%xmm0
jmp    1214 <find_number+0x104>
xorpd  %xmm0,%xmm0
lea    -0x1(%r12),%rax
cmp    %rax,%r13
jge    1299 <find_number+0x189>
mov    %r13,%r14
not    %r14
add    %r12,%r14
lea    -0x2(%r12),%rax
cmp    %r13,%rax
jne    144b <find_number+0x33b>
mov    $0xffffffffffffffff,%rbp
test   $0x1,%r14b
mov    0x28(%rsp),%rbx
je     129e <find_number+0x18e>
mov    0x8(%r15,%r13,8),%rax
add    $0xffffffffffffffd0,%rax
cmp    $0x9,%rax
ja     129e <find_number+0x18e>
xorps  %xmm1,%xmm1
cvtsi2sd %rax,%xmm1
movsd  %xmm1,0x10(%rsp)
xorps  %xmm1,%xmm1
cvtsi2sd %rbp,%xmm1
movapd %xmm0,(%rsp)
movsd  0xd87(%rip),%xmm0
call   1030 <pow@plt>
mulsd  0x10(%rsp),%xmm0
movapd (%rsp),%xmm1
addsd  %xmm0,%xmm1
movapd %xmm1,(%rsp)
movapd (%rsp),%xmm0
jmp    129e <find_number+0x18e>
mov    0x28(%rsp),%rbx
movapd %xmm0,(%rsp)
lea    -0x1(%rbx),%rbp
xorpd  %xmm1,%xmm1
cmp    %r12,%rbp
jle    133a <find_number+0x22a>
mov    %r12,%r13
not    %r13
add    %rbx,%r13
add    $0xfffffffffffffffe,%rbx
cmp    %r12,%rbx
mov    %rbp,0x30(%rsp)
jne    151b <find_number+0x40b>
xorpd  %xmm1,%xmm1
xor    %r14d,%r14d
test   $0x1,%r13b
je     1323 <find_number+0x213>
mov    (%r15,%rbp,8),%rax
add    $0xffffffffffffffd0,%rax
cmp    $0x9,%rax
ja     1323 <find_number+0x213>
xorps  %xmm0,%xmm0
cvtsi2sd %rax,%xmm0
movsd  %xmm0,0x28(%rsp)
movapd %xmm1,0x10(%rsp)
xorps  %xmm1,%xmm1
cvtsi2sd %r14,%xmm1
movsd  0xcf2(%rip),%xmm0
call   1030 <pow@plt>
movapd 0x10(%rsp),%xmm1
mulsd  0x28(%rsp),%xmm0
addsd  %xmm0,%xmm1
cmp    %r12,0x30(%rsp)
jle    133a <find_number+0x22a>
cmpq   $0x2d,0x8(%r15,%r12,8)
jne    133a <find_number+0x22a>
xorpd  0xcd6(%rip),%xmm1
movsd  0xcbe(%rip),%xmm0
call   1030 <pow@plt>
movapd (%rsp),%xmm1
mulsd  %xmm0,%xmm1
movapd %xmm1,%xmm0
cmpq   $0x2d,(%r15)
jne    1362 <find_number+0x252>
xorpd  0xcae(%rip),%xmm0
add    $0x38,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
mov    %r13,%rbx
and    $0xfffffffffffffffe,%rbx
xorpd  %xmm0,%xmm0
xor    %r14d,%r14d
mov    %r13,%rbp
jmp    139e <find_number+0x28e>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
add    $0xfffffffffffffffe,%rbp
add    $0xfffffffffffffffe,%rbx
je     11b8 <find_number+0xa8>
mov    -0x8(%r15,%rbp,8),%rax
add    $0xffffffffffffffd0,%rax
cmp    $0x9,%rax
ja     13f2 <find_number+0x2e2>
xorps  %xmm1,%xmm1
cvtsi2sd %rax,%xmm1
movsd  %xmm1,0x10(%rsp)
xorps  %xmm1,%xmm1
cvtsi2sd %r14,%xmm1
movapd %xmm0,(%rsp)
movsd  0xc30(%rip),%xmm0
call   1030 <pow@plt>
mulsd  0x10(%rsp),%xmm0
movapd (%rsp),%xmm1
addsd  %xmm0,%xmm1
movapd %xmm1,(%rsp)
movapd (%rsp),%xmm0
add    $0x1,%r14
mov    -0x10(%r15,%rbp,8),%rax
add    $0xffffffffffffffd0,%rax
cmp    $0x9,%rax
ja     1390 <find_number+0x280>
xorps  %xmm1,%xmm1
cvtsi2sd %rax,%xmm1
movsd  %xmm1,0x10(%rsp)
xorps  %xmm1,%xmm1
cvtsi2sd %r14,%xmm1
movapd %xmm0,(%rsp)
movsd  0xbdc(%rip),%xmm0
call   1030 <pow@plt>
mulsd  0x10(%rsp),%xmm0
movapd (%rsp),%xmm1
addsd  %xmm0,%xmm1
movapd %xmm1,(%rsp)
movapd (%rsp),%xmm0
add    $0x1,%r14
jmp    1390 <find_number+0x280>
mov    %r14,%rbx
and    $0xfffffffffffffffe,%rbx
mov    $0xffffffffffffffff,%rbp
jmp    146e <find_number+0x35e>
nopl   0x0(%rax,%rax,1)
add    $0x2,%r13
add    $0xfffffffffffffffe,%rbx
je     123c <find_number+0x12c>
mov    0x8(%r15,%r13,8),%rax
add    $0xffffffffffffffd0,%rax
cmp    $0x9,%rax
ja     14c2 <find_number+0x3b2>
xorps  %xmm1,%xmm1
cvtsi2sd %rax,%xmm1
movsd  %xmm1,0x10(%rsp)
xorps  %xmm1,%xmm1
cvtsi2sd %rbp,%xmm1
movapd %xmm0,(%rsp)
movsd  0xb60(%rip),%xmm0
call   1030 <pow@plt>
mulsd  0x10(%rsp),%xmm0
movapd (%rsp),%xmm1
addsd  %xmm0,%xmm1
movapd %xmm1,(%rsp)
movapd (%rsp),%xmm0
add    $0xffffffffffffffff,%rbp
mov    0x10(%r15,%r13,8),%rax
add    $0xffffffffffffffd0,%rax
cmp    $0x9,%rax
ja     1460 <find_number+0x350>
xorps  %xmm1,%xmm1
cvtsi2sd %rax,%xmm1
movsd  %xmm1,0x10(%rsp)
xorps  %xmm1,%xmm1
cvtsi2sd %rbp,%xmm1
movapd %xmm0,(%rsp)
movsd  0xb0c(%rip),%xmm0
call   1030 <pow@plt>
mulsd  0x10(%rsp),%xmm0
movapd (%rsp),%xmm1
addsd  %xmm0,%xmm1
movapd %xmm1,(%rsp)
movapd (%rsp),%xmm0
add    $0xffffffffffffffff,%rbp
jmp    1460 <find_number+0x350>
mov    %r13,%rbx
and    $0xfffffffffffffffe,%rbx
xorpd  %xmm1,%xmm1
xor    %r14d,%r14d
jmp    153e <find_number+0x42e>
nopl   0x0(%rax,%rax,1)
add    $0xfffffffffffffffe,%rbp
add    $0xfffffffffffffffe,%rbx
je     12d6 <find_number+0x1c6>
mov    (%r15,%rbp,8),%rax
add    $0xffffffffffffffd0,%rax
cmp    $0x9,%rax
ja     1589 <find_number+0x479>
xorps  %xmm0,%xmm0
cvtsi2sd %rax,%xmm0
movsd  %xmm0,0x28(%rsp)
movapd %xmm1,0x10(%rsp)
xorps  %xmm1,%xmm1
cvtsi2sd %r14,%xmm1
movsd  0xa90(%rip),%xmm0
call   1030 <pow@plt>
movapd 0x10(%rsp),%xmm1
mulsd  0x28(%rsp),%xmm0
addsd  %xmm0,%xmm1
add    $0x1,%r14
mov    -0x8(%r15,%rbp,8),%rax
add    $0xffffffffffffffd0,%rax
cmp    $0x9,%rax
ja     1530 <find_number+0x420>
xorps  %xmm0,%xmm0
cvtsi2sd %rax,%xmm0
movsd  %xmm0,0x28(%rsp)
movapd %xmm1,0x10(%rsp)
xorps  %xmm1,%xmm1
cvtsi2sd %r14,%xmm1
movsd  0xa44(%rip),%xmm0
call   1030 <pow@plt>
movapd 0x10(%rsp),%xmm1
mulsd  0x28(%rsp),%xmm0
addsd  %xmm0,%xmm1
add    $0x1,%r14
jmp    1530 <find_number+0x420>

LLVM IR (-O0):
define double @find_number(i64* %0, i64 %1) {
%3 = alloca i64*
%4 = alloca i64
%5 = alloca double
%6 = alloca double
%7 = alloca i64
%8 = alloca i64
%9 = alloca i64
%10 = alloca i64
store i64* %0, i64** %3
store i64 %1, i64* %4
store double 0.000000e+00, double* %5
store double 0.000000e+00, double* %6
store i64 -1, i64* %8
store i64 0, i64* %7
br label %11
11: ; preds = %35, %2
%12 = load i64*, i64** %3
%13 = load i64, i64* %7
%14 = getelementptr inbounds i64, i64* %12, i64 %13
%15 = load i64, i64* %14
%16 = icmp eq i64 %15, 69
br i1 %16, label %23, label %17
17: ; preds = %11
%18 = load i64*, i64** %3
%19 = load i64, i64* %7
%20 = getelementptr inbounds i64, i64* %18, i64 %19
%21 = load i64, i64* %20
%22 = icmp eq i64 %21, 101
br i1 %22, label %23, label %25
23: ; preds = %17, %11
%24 = load i64, i64* %7
store i64 %24, i64* %8
br label %25
25: ; preds = %23, %17
%26 = load i64, i64* %7
%27 = add nsw i64 %26, 1
store i64 %27, i64* %7
br label %28
28: ; preds = %25
%29 = load i64, i64* %8
%30 = icmp eq i64 %29, -1
br i1 %30, label %31, label %35
31: ; preds = %28
%32 = load i64, i64* %7
%33 = load i64, i64* %4
%34 = icmp slt i64 %32, %33
br label %35
35: ; preds = %31, %28
%36 = phi i1 [ false, %28 ], [ %34, %31 ]
br i1 %36, label %11, label %37
37: ; preds = %35
%38 = load i64, i64* %8
%39 = icmp eq i64 %38, -1
br i1 %39, label %40, label %42
40: ; preds = %37
%41 = load i64, i64* %4
store i64 %41, i64* %8
br label %42
42: ; preds = %40, %37
store i64 -1, i64* %9
store i64 0, i64* %7
br label %43
43: ; preds = %61, %42
%44 = load i64*, i64** %3
%45 = load i64, i64* %7
%46 = getelementptr inbounds i64, i64* %44, i64 %45
%47 = load i64, i64* %46
%48 = icmp eq i64 %47, 46
br i1 %48, label %49, label %51
49: ; preds = %43
%50 = load i64, i64* %7
store i64 %50, i64* %9
br label %51
51: ; preds = %49, %43
%52 = load i64, i64* %7
%53 = add nsw i64 %52, 1
store i64 %53, i64* %7
br label %54
54: ; preds = %51
%55 = load i64, i64* %9
%56 = icmp eq i64 %55, -1
br i1 %56, label %57, label %61
57: ; preds = %54
%58 = load i64, i64* %7
%59 = load i64, i64* %4
%60 = icmp slt i64 %58, %59
br label %61
61: ; preds = %57, %54
%62 = phi i1 [ false, %54 ], [ %60, %57 ]
br i1 %62, label %43, label %63
63: ; preds = %61
%64 = load i64, i64* %9
%65 = icmp eq i64 %64, -1
br i1 %65, label %66, label %71
66: ; preds = %63
%67 = load i64, i64* %8
%68 = icmp sgt i64 %67, -1
br i1 %68, label %69, label %71
69: ; preds = %66
%70 = load i64, i64* %8
store i64 %70, i64* %9
br label %71
71: ; preds = %69, %66, %63
%72 = load i64, i64* %9
%73 = icmp eq i64 %72, -1
br i1 %73, label %74, label %76
74: ; preds = %71
%75 = load i64, i64* %4
store i64 %75, i64* %9
br label %76
76: ; preds = %74, %71
store i64 0, i64* %10
%77 = load i64, i64* %9
%78 = sub nsw i64 %77, 1
store i64 %78, i64* %7
br label %79
79: ; preds = %109, %76
%80 = load i64, i64* %7
%81 = icmp sge i64 %80, 0
br i1 %81, label %82, label %112
82: ; preds = %79
%83 = load i64*, i64** %3
%84 = load i64, i64* %7
%85 = getelementptr inbounds i64, i64* %83, i64 %84
%86 = load i64, i64* %85
%87 = icmp sge i64 %86, 48
br i1 %87, label %88, label %108
88: ; preds = %82
%89 = load i64*, i64** %3
%90 = load i64, i64* %7
%91 = getelementptr inbounds i64, i64* %89, i64 %90
%92 = load i64, i64* %91
%93 = icmp sle i64 %92, 57
br i1 %93, label %94, label %108
94: ; preds = %88
%95 = load i64*, i64** %3
%96 = load i64, i64* %7
%97 = getelementptr inbounds i64, i64* %95, i64 %96
%98 = load i64, i64* %97
%99 = sub nsw i64 %98, 48
%100 = sitofp i64 %99 to double
%101 = load i64, i64* %10
%102 = sitofp i64 %101 to double
%103 = call double @pow(double 1.000000e+01, double %102)
%104 = load double, double* %5
%105 = call double @llvm.fmuladd.f64(double %100, double %103, double %104)
store double %105, double* %5
%106 = load i64, i64* %10
%107 = add nsw i64 %106, 1
store i64 %107, i64* %10
br label %108
108: ; preds = %94, %88, %82
br label %109
109: ; preds = %108
%110 = load i64, i64* %7
%111 = add nsw i64 %110, -1
store i64 %111, i64* %7
br label %79
112: ; preds = %79
store i64 -1, i64* %10
%113 = load i64, i64* %9
%114 = add nsw i64 %113, 1
store i64 %114, i64* %7
br label %115
115: ; preds = %147, %112
%116 = load i64, i64* %7
%117 = load i64, i64* %8
%118 = sub nsw i64 %117, 1
%119 = icmp sle i64 %116, %118
br i1 %119, label %120, label %150
120: ; preds = %115
%121 = load i64*, i64** %3
%122 = load i64, i64* %7
%123 = getelementptr inbounds i64, i64* %121, i64 %122
%124 = load i64, i64* %123
%125 = icmp sge i64 %124, 48
br i1 %125, label %126, label %146
126: ; preds = %120
%127 = load i64*, i64** %3
%128 = load i64, i64* %7
%129 = getelementptr inbounds i64, i64* %127, i64 %128
%130 = load i64, i64* %129
%131 = icmp sle i64 %130, 57
br i1 %131, label %132, label %146
132: ; preds = %126
%133 = load i64*, i64** %3
%134 = load i64, i64* %7
%135 = getelementptr inbounds i64, i64* %133, i64 %134
%136 = load i64, i64* %135
%137 = sub nsw i64 %136, 48
%138 = sitofp i64 %137 to double
%139 = load i64, i64* %10
%140 = sitofp i64 %139 to double
%141 = call double @pow(double 1.000000e+01, double %140)
%142 = load double, double* %5
%143 = call double @llvm.fmuladd.f64(double %138, double %141, double %142)
store double %143, double* %5
%144 = load i64, i64* %10
%145 = add nsw i64 %144, -1
store i64 %145, i64* %10
br label %146
146: ; preds = %132, %126, %120
br label %147
147: ; preds = %146
%148 = load i64, i64* %7
%149 = add nsw i64 %148, 1
store i64 %149, i64* %7
br label %115
150: ; preds = %115
store i64 0, i64* %10
%151 = load i64, i64* %4
%152 = sub nsw i64 %151, 1
store i64 %152, i64* %7
br label %153
153: ; preds = %185, %150
%154 = load i64, i64* %7
%155 = load i64, i64* %8
%156 = add nsw i64 %155, 1
%157 = icmp sge i64 %154, %156
br i1 %157, label %158, label %188
158: ; preds = %153
%159 = load i64*, i64** %3
%160 = load i64, i64* %7
%161 = getelementptr inbounds i64, i64* %159, i64 %160
%162 = load i64, i64* %161
%163 = icmp sge i64 %162, 48
br i1 %163, label %164, label %184
164: ; preds = %158
%165 = load i64*, i64** %3
%166 = load i64, i64* %7
%167 = getelementptr inbounds i64, i64* %165, i64 %166
%168 = load i64, i64* %167
%169 = icmp sle i64 %168, 57
br i1 %169, label %170, label %184
170: ; preds = %164
%171 = load i64*, i64** %3
%172 = load i64, i64* %7
%173 = getelementptr inbounds i64, i64* %171, i64 %172
%174 = load i64, i64* %173
%175 = sub nsw i64 %174, 48
%176 = sitofp i64 %175 to double
%177 = load i64, i64* %10
%178 = sitofp i64 %177 to double
%179 = call double @pow(double 1.000000e+01, double %178)
%180 = load double, double* %6
%181 = call double @llvm.fmuladd.f64(double %176, double %179, double %180)
store double %181, double* %6
%182 = load i64, i64* %10
%183 = add nsw i64 %182, 1
store i64 %183, i64* %10
br label %184
184: ; preds = %170, %164, %158
br label %185
185: ; preds = %184
%186 = load i64, i64* %7
%187 = add nsw i64 %186, -1
store i64 %187, i64* %7
br label %153
188: ; preds = %153
%189 = load i64, i64* %8
%190 = load i64, i64* %4
%191 = sub nsw i64 %190, 1
%192 = icmp slt i64 %189, %191
br i1 %192, label %193, label %204
193: ; preds = %188
%194 = load i64*, i64** %3
%195 = load i64, i64* %8
%196 = add nsw i64 %195, 1
%197 = getelementptr inbounds i64, i64* %194, i64 %196
%198 = load i64, i64* %197
%199 = icmp eq i64 %198, 45
br i1 %199, label %200, label %203
200: ; preds = %193
%201 = load double, double* %6
%202 = fmul double %201, -1.000000e+00
store double %202, double* %6
br label %203
203: ; preds = %200, %193
br label %204
204: ; preds = %203, %188
%205 = load double, double* %5
%206 = load double, double* %6
%207 = call double @pow(double 1.000000e+01, double %206)
%208 = fmul double %205, %207
store double %208, double* %5
%209 = load i64*, i64** %3
%210 = getelementptr inbounds i64, i64* %209, i64 0
%211 = load i64, i64* %210
%212 = icmp eq i64 %211, 45
br i1 %212, label %213, label %216
213: ; preds = %204
%214 = load double, double* %5
%215 = fmul double %214, -1.000000e+00
store double %215, double* %5
br label %216
216: ; preds = %213, %204
%217 = load double, double* %5
ret double %217
}

LLVM IR (-O2):
define double @find_number(i64* nocapture %0, i64 %1) {
%3 = call i64 @llvm.smax.i64(i64 %1, i64 1)
br label %4
4: ; preds = %8, %2
%5 = phi i64 [ 0, %2 ], [ %9, %8 ]
%6 = getelementptr inbounds i64, i64* %0, i64 %5
%7 = load i64, i64* %6
switch i64 %7, label %8 [
i64 69, label %11
i64 101, label %11
]
8: ; preds = %4
%9 = add nuw nsw i64 %5, 1
%10 = icmp eq i64 %9, %3
br i1 %10, label %11, label %4
11: ; preds = %8, %4, %4
%12 = phi i64 [ %5, %4 ], [ %5, %4 ], [ %1, %8 ]
br label %13
13: ; preds = %13, %11
%14 = phi i64 [ 0, %11 ], [ %19, %13 ]
%15 = getelementptr inbounds i64, i64* %0, i64 %14
%16 = load i64, i64* %15
%17 = icmp eq i64 %16, 46
%18 = select i1 %17, i64 %14, i64 -1
%19 = add nuw nsw i64 %14, 1
%20 = icmp eq i64 %18, -1
%21 = icmp slt i64 %19, %1
%22 = select i1 %20, i1 %21, i1 false
br i1 %22, label %13, label %23
23: ; preds = %13
%24 = icmp sgt i64 %12, -1
%25 = select i1 %20, i1 %24, i1 false
%26 = select i1 %25, i64 %12, i64 %18
%27 = icmp eq i64 %26, -1
%28 = select i1 %27, i64 %1, i64 %26
%29 = icmp sgt i64 %28, 0
br i1 %29, label %30, label %52
30: ; preds = %23
%31 = and i64 %28, 1
%32 = icmp eq i64 %28, 1
br i1 %32, label %35, label %33
33: ; preds = %30
%34 = and i64 %28, -2
br label %64
35: ; preds = %94, %30
%36 = phi double [ undef, %30 ], [ %95, %94 ]
%37 = phi i64 [ %28, %30 ], [ %83, %94 ]
%38 = phi i64 [ 0, %30 ], [ %96, %94 ]
%39 = phi double [ 0.000000e+00, %30 ], [ %95, %94 ]
%40 = icmp eq i64 %31, 0
br i1 %40, label %52, label %41
41: ; preds = %35
%42 = add nsw i64 %37, -1
%43 = getelementptr inbounds i64, i64* %0, i64 %42
%44 = load i64, i64* %43
%45 = add i64 %44, -48
%46 = icmp ult i64 %45, 10
br i1 %46, label %47, label %52
47: ; preds = %41
%48 = sitofp i64 %45 to double
%49 = sitofp i64 %38 to double
%50 = tail call double @pow(double 1.000000e+01, double %49)
%51 = tail call double @llvm.fmuladd.f64(double %48, double %50, double %39)
br label %52
52: ; preds = %35, %47, %41, %23
%53 = phi double [ 0.000000e+00, %23 ], [ %36, %35 ], [ %51, %47 ], [ %39, %41 ]
%54 = add i64 %12, -1
%55 = icmp slt i64 %28, %54
br i1 %55, label %56, label %151
56: ; preds = %52
%57 = xor i64 %28, -1
%58 = add i64 %12, %57
%59 = add i64 %12, -2
%60 = and i64 %58, 1
%61 = icmp eq i64 %59, %28
br i1 %61, label %134, label %62
62: ; preds = %56
%63 = and i64 %58, -2
br label %99
64: ; preds = %94, %33
%65 = phi i64 [ %28, %33 ], [ %83, %94 ]
%66 = phi i64 [ 0, %33 ], [ %96, %94 ]
%67 = phi double [ 0.000000e+00, %33 ], [ %95, %94 ]
%68 = phi i64 [ 0, %33 ], [ %97, %94 ]
%69 = add nsw i64 %65, -1
%70 = getelementptr inbounds i64, i64* %0, i64 %69
%71 = load i64, i64* %70
%72 = add i64 %71, -48
%73 = icmp ult i64 %72, 10
br i1 %73, label %74, label %80
74: ; preds = %64
%75 = sitofp i64 %72 to double
%76 = sitofp i64 %66 to double
%77 = tail call double @pow(double 1.000000e+01, double %76)
%78 = tail call double @llvm.fmuladd.f64(double %75, double %77, double %67)
%79 = add nsw i64 %66, 1
br label %80
80: ; preds = %64, %74
%81 = phi double [ %78, %74 ], [ %67, %64 ]
%82 = phi i64 [ %79, %74 ], [ %66, %64 ]
%83 = add nsw i64 %65, -2
%84 = getelementptr inbounds i64, i64* %0, i64 %83
%85 = load i64, i64* %84
%86 = add i64 %85, -48
%87 = icmp ult i64 %86, 10
br i1 %87, label %88, label %94
88: ; preds = %80
%89 = sitofp i64 %86 to double
%90 = sitofp i64 %82 to double
%91 = tail call double @pow(double 1.000000e+01, double %90)
%92 = tail call double @llvm.fmuladd.f64(double %89, double %91, double %81)
%93 = add nsw i64 %82, 1
br label %94
94: ; preds = %88, %80
%95 = phi double [ %92, %88 ], [ %81, %80 ]
%96 = phi i64 [ %93, %88 ], [ %82, %80 ]
%97 = add i64 %68, 2
%98 = icmp eq i64 %97, %34
br i1 %98, label %35, label %64
99: ; preds = %129, %62
%100 = phi i64 [ %28, %62 ], [ %118, %129 ]
%101 = phi i64 [ -1, %62 ], [ %131, %129 ]
%102 = phi double [ %53, %62 ], [ %130, %129 ]
%103 = phi i64 [ 0, %62 ], [ %132, %129 ]
%104 = add nsw i64 %100, 1
%105 = getelementptr inbounds i64, i64* %0, i64 %104
%106 = load i64, i64* %105
%107 = add i64 %106, -48
%108 = icmp ult i64 %107, 10
br i1 %108, label %109, label %115
109: ; preds = %99
%110 = sitofp i64 %107 to double
%111 = sitofp i64 %101 to double
%112 = tail call double @pow(double 1.000000e+01, double %111)
%113 = tail call double @llvm.fmuladd.f64(double %110, double %112, double %102)
%114 = add nsw i64 %101, -1
br label %115
115: ; preds = %99, %109
%116 = phi double [ %113, %109 ], [ %102, %99 ]
%117 = phi i64 [ %114, %109 ], [ %101, %99 ]
%118 = add nsw i64 %100, 2
%119 = getelementptr inbounds i64, i64* %0, i64 %118
%120 = load i64, i64* %119
%121 = add i64 %120, -48
%122 = icmp ult i64 %121, 10
br i1 %122, label %123, label %129
123: ; preds = %115
%124 = sitofp i64 %121 to double
%125 = sitofp i64 %117 to double
%126 = tail call double @pow(double 1.000000e+01, double %125)
%127 = tail call double @llvm.fmuladd.f64(double %124, double %126, double %116)
%128 = add nsw i64 %117, -1
br label %129
129: ; preds = %123, %115
%130 = phi double [ %127, %123 ], [ %116, %115 ]
%131 = phi i64 [ %128, %123 ], [ %117, %115 ]
%132 = add i64 %103, 2
%133 = icmp eq i64 %132, %63
br i1 %133, label %134, label %99
134: ; preds = %129, %56
%135 = phi double [ undef, %56 ], [ %130, %129 ]
%136 = phi i64 [ %28, %56 ], [ %118, %129 ]
%137 = phi i64 [ -1, %56 ], [ %131, %129 ]
%138 = phi double [ %53, %56 ], [ %130, %129 ]
%139 = icmp eq i64 %60, 0
br i1 %139, label %151, label %140
140: ; preds = %134
%141 = add nsw i64 %136, 1
%142 = getelementptr inbounds i64, i64* %0, i64 %141
%143 = load i64, i64* %142
%144 = add i64 %143, -48
%145 = icmp ult i64 %144, 10
br i1 %145, label %146, label %151
146: ; preds = %140
%147 = sitofp i64 %144 to double
%148 = sitofp i64 %137 to double
%149 = tail call double @pow(double 1.000000e+01, double %148)
%150 = tail call double @llvm.fmuladd.f64(double %147, double %149, double %138)
br label %151
151: ; preds = %134, %146, %140, %52
%152 = phi double [ %53, %52 ], [ %135, %134 ], [ %150, %146 ], [ %138, %140 ]
%153 = add nsw i64 %1, -1
%154 = icmp sgt i64 %153, %12
br i1 %154, label %155, label %223
155: ; preds = %151
%156 = xor i64 %12, -1
%157 = add i64 %156, %1
%158 = add i64 %1, -2
%159 = and i64 %157, 1
%160 = icmp eq i64 %158, %12
br i1 %160, label %198, label %161
161: ; preds = %155
%162 = and i64 %157, -2
br label %163
163: ; preds = %192, %161
%164 = phi i64 [ 0, %161 ], [ %194, %192 ]
%165 = phi i64 [ %153, %161 ], [ %195, %192 ]
%166 = phi double [ 0.000000e+00, %161 ], [ %193, %192 ]
%167 = phi i64 [ 0, %161 ], [ %196, %192 ]
%168 = getelementptr inbounds i64, i64* %0, i64 %165
%169 = load i64, i64* %168
%170 = add i64 %169, -48
%171 = icmp ult i64 %170, 10
br i1 %171, label %172, label %178
172: ; preds = %163
%173 = sitofp i64 %170 to double
%174 = sitofp i64 %164 to double
%175 = tail call double @pow(double 1.000000e+01, double %174)
%176 = tail call double @llvm.fmuladd.f64(double %173, double %175, double %166)
%177 = add nsw i64 %164, 1
br label %178
178: ; preds = %163, %172
%179 = phi double [ %176, %172 ], [ %166, %163 ]
%180 = phi i64 [ %177, %172 ], [ %164, %163 ]
%181 = add nsw i64 %165, -1
%182 = getelementptr inbounds i64, i64* %0, i64 %181
%183 = load i64, i64* %182
%184 = add i64 %183, -48
%185 = icmp ult i64 %184, 10
br i1 %185, label %186, label %192
186: ; preds = %178
%187 = sitofp i64 %184 to double
%188 = sitofp i64 %180 to double
%189 = tail call double @pow(double 1.000000e+01, double %188)
%190 = tail call double @llvm.fmuladd.f64(double %187, double %189, double %179)
%191 = add nsw i64 %180, 1
br label %192
192: ; preds = %186, %178
%193 = phi double [ %190, %186 ], [ %179, %178 ]
%194 = phi i64 [ %191, %186 ], [ %180, %178 ]
%195 = add nsw i64 %165, -2
%196 = add i64 %167, 2
%197 = icmp eq i64 %196, %162
br i1 %197, label %198, label %163
198: ; preds = %192, %155
%199 = phi double [ undef, %155 ], [ %193, %192 ]
%200 = phi i64 [ 0, %155 ], [ %194, %192 ]
%201 = phi i64 [ %153, %155 ], [ %195, %192 ]
%202 = phi double [ 0.000000e+00, %155 ], [ %193, %192 ]
%203 = icmp eq i64 %159, 0
br i1 %203, label %214, label %204
204: ; preds = %198
%205 = getelementptr inbounds i64, i64* %0, i64 %201
%206 = load i64, i64* %205
%207 = add i64 %206, -48
%208 = icmp ult i64 %207, 10
br i1 %208, label %209, label %214
209: ; preds = %204
%210 = sitofp i64 %207 to double
%211 = sitofp i64 %200 to double
%212 = tail call double @pow(double 1.000000e+01, double %211)
%213 = tail call double @llvm.fmuladd.f64(double %210, double %212, double %202)
br label %214
214: ; preds = %204, %209, %198
%215 = phi double [ %199, %198 ], [ %213, %209 ], [ %202, %204 ]
br i1 %154, label %216, label %223
216: ; preds = %214
%217 = add nsw i64 %12, 1
%218 = getelementptr inbounds i64, i64* %0, i64 %217
%219 = load i64, i64* %218
%220 = icmp eq i64 %219, 45
%221 = fneg double %215
%222 = select i1 %220, double %221, double %215
br label %223
223: ; preds = %151, %216, %214
%224 = phi double [ %215, %214 ], [ %222, %216 ], [ 0.000000e+00, %151 ]
%225 = tail call double @pow(double 1.000000e+01, double %224)
%226 = fmul double %152, %225
%227 = load i64, i64* %0
%228 = icmp eq i64 %227, 45
%229 = fneg double %226
%230 = select i1 %228, double %229, double %226
ret double %230
}