46 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			V
		
	
	
			
		
		
	
	
			46 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			V
		
	
	
| module math
 | |
| 
 | |
| // nextafter32 returns the next representable f32 value after x towards y.
 | |
| //
 | |
| // special cases are:
 | |
| // nextafter32(x, x)   = x
 | |
| // nextafter32(nan, y) = nan
 | |
| // nextafter32(x, nan) = nan
 | |
| pub fn nextafter32(x f32, y f32) f32 {
 | |
| 	mut r := f32(0.0)
 | |
| 	if is_nan(f64(x)) || is_nan(f64(y)) {
 | |
| 		r = f32(nan())
 | |
| 	} else if x == y {
 | |
| 		r = x
 | |
| 	} else if x == 0 {
 | |
| 		r = f32(copysign(f64(f32_from_bits(1)), f64(y)))
 | |
| 	} else if (y > x) == (x > 0) {
 | |
| 		r = f32_from_bits(f32_bits(x) + 1)
 | |
| 	} else {
 | |
| 		r = f32_from_bits(f32_bits(x) - 1)
 | |
| 	}
 | |
| 	return r
 | |
| }
 | |
| 
 | |
| // nextafter returns the next representable f64 value after x towards y.
 | |
| //
 | |
| // special cases are:
 | |
| // nextafter(x, x)   = x
 | |
| // nextafter(nan, y) = nan
 | |
| // nextafter(x, nan) = nan
 | |
| pub fn nextafter(x f64, y f64) f64 {
 | |
| 	mut r := 0.0
 | |
| 	if is_nan(x) || is_nan(y) {
 | |
| 		r = nan()
 | |
| 	} else if x == y {
 | |
| 		r = x
 | |
| 	} else if x == 0 {
 | |
| 		r = copysign(f64_from_bits(1), y)
 | |
| 	} else if (y > x) == (x > 0) {
 | |
| 		r = f64_from_bits(f64_bits(x) + 1)
 | |
| 	} else {
 | |
| 		r = f64_from_bits(f64_bits(x) - 1)
 | |
| 	}
 | |
| 	return r
 | |
| }
 |