mirror of
				https://github.com/golang/go.git
				synced 2025-10-31 08:40:55 +00:00 
			
		
		
		
	 16200c7333
			
		
	
	
		16200c7333
		
	
	
	
	
		
			
			- changes tests to check that the real and imaginary part of the go complex division result is equal to the result gcc produces for c99 - changes complex division code to satisfy new complex division test - adds float functions isNan, isFinite, isInf, abs and copysign in the runtime package Fixes #14644. name old time/op new time/op delta Complex128DivNormal-4 21.8ns ± 6% 13.9ns ± 6% -36.37% (p=0.000 n=20+20) Complex128DivNisNaN-4 14.1ns ± 1% 15.0ns ± 1% +5.86% (p=0.000 n=20+19) Complex128DivDisNaN-4 12.5ns ± 1% 16.7ns ± 1% +33.79% (p=0.000 n=19+20) Complex128DivNisInf-4 10.1ns ± 1% 13.0ns ± 1% +28.25% (p=0.000 n=20+19) Complex128DivDisInf-4 11.0ns ± 1% 20.9ns ± 1% +90.69% (p=0.000 n=16+19) ComplexAlgMap-4 86.7ns ± 1% 86.8ns ± 2% ~ (p=0.804 n=20+20) Change-Id: I261f3b4a81f6cc858bc7ff48f6fd1b39c300abf0 Reviewed-on: https://go-review.googlesource.com/37441 Reviewed-by: Robert Griesemer <gri@golang.org>
		
			
				
	
	
		
			44 lines
		
	
	
	
		
			868 B
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			44 lines
		
	
	
	
		
			868 B
		
	
	
	
		
			Go
		
	
	
	
	
	
| // run cmplxdivide1.go
 | |
| 
 | |
| // Copyright 2010 The Go Authors. All rights reserved.
 | |
| // Use of this source code is governed by a BSD-style
 | |
| // license that can be found in the LICENSE file.
 | |
| 
 | |
| // Driver for complex division table defined in cmplxdivide1.go
 | |
| // For details, see the comment at the top of cmplxdivide.c.
 | |
| 
 | |
| package main
 | |
| 
 | |
| import (
 | |
| 	"fmt"
 | |
| 	"math"
 | |
| )
 | |
| 
 | |
| func calike(a, b complex128) bool {
 | |
| 	if imag(a) != imag(b) && !(math.IsNaN(imag(a)) && math.IsNaN(imag(b))) {
 | |
| 		return false
 | |
| 	}
 | |
| 
 | |
| 	if real(a) != real(b) && !(math.IsNaN(real(a)) && math.IsNaN(real(b))) {
 | |
| 		return false
 | |
| 	}
 | |
| 
 | |
| 	return true
 | |
| }
 | |
| 
 | |
| func main() {
 | |
| 	bad := false
 | |
| 	for _, t := range tests {
 | |
| 		x := t.f / t.g
 | |
| 		if !calike(x, t.out) {
 | |
| 			if !bad {
 | |
| 				fmt.Printf("BUG\n")
 | |
| 				bad = true
 | |
| 			}
 | |
| 			fmt.Printf("%v/%v: expected %v error; got %v\n", t.f, t.g, t.out, x)
 | |
| 		}
 | |
| 	}
 | |
| 	if bad {
 | |
| 		panic("cmplxdivide failed.")
 | |
| 	}
 | |
| }
 |