text: /*-*- mode:c;indent-tabs-mode:t;c-basic-offset:8;tab-width:8;coding:utf-8   -*-│
  │vi: set et ft=c ts=8 tw=8 fenc=utf-8                                       :vi│
  ╚──────────────────────────────────────────────────────────────────────────────╝
  │                                                                              │
  │  Musl Libc                                                                   │
  │  Copyright © 2005-2020 Rich Felker, et al.                                   │
  │                                                                              │
  │  Permission is hereby granted, free of charge, to any person obtaining       │
  │  a copy of this software and associated documentation files (the             │
  │  "Software"), to deal in the Software without restriction, including         │
  │  without limitation the rights to use, copy, modify, merge, publish,         │
  │  distribute, sublicense, and/or sell copies of the Software, and to          │
  │  permit persons to whom the Software is furnished to do so, subject to       │
  │  the following conditions:                                                   │
  │                                                                              │
  │  The above copyright notice and this permission notice shall be              │
  │  included in all copies or substantial portions of the Software.             │
  │                                                                              │
  │  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,             │
  │  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF          │
  │  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.      │
  │  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY        │
  │  CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,        │
  │  TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE           │
  │  SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.                      │
  │                                                                              │
  ╚─────────────────────────────────────────────────────────────────────────────*/
  #include "libc/math.h"
  #include "libc/tinymath/feval.internal.h"
  
  asm(".ident\t\"\\n\\n\
  Musl libc (MIT License)\\n\
  Copyright 2005-2014 Rich Felker, et. al.\"");
  asm(".include \"libc/disclaimer.inc\"");
  /* clang-format off */
  
  double nexttoward(double x, long double y)
  {
  	union {double f; uint64_t i;} ux = {x};
  	int e;
  
  	if (isnan(x) || isnan(y))
  		return x + y;
  	if (x == y)
  		return y;
  	if (x == 0) {
  		ux.i = 1;
  		if (signbit(y))
  			ux.i |= 1ULL<<63;
  	} else if (x < y) {
  		if (signbit(x))
  			ux.i--;
  		else
  			ux.i++;
  	} else {
  		if (signbit(x))
  			ux.i++;
  		else
  			ux.i--;
  	}
  	e = ux.i>>52 & 0x7ff;
  	/* raise overflow if ux.f is infinite and x is finite */
  	if (e == 0x7ff)
  		feval(x+x);
  	/* raise underflow if ux.f is subnormal or zero */
  	if (e == 0)
  		feval(x*x + ux.f*ux.f);
  	return ux.f;
  }
  