Bitwise operations on floats actually arent useful
This commit is contained in:
		
							parent
							
								
									afe0ed33ca
								
							
						
					
					
						commit
						c64cda0870
					
				
							
								
								
									
										87
									
								
								calculate.go
									
									
									
									
									
								
							
							
						
						
									
										87
									
								
								calculate.go
									
									
									
									
									
								
							| @ -183,7 +183,6 @@ func (operation *Operation) solution () (solution int64, err error) { | |||||||
| 
 | 
 | ||||||
| func (operation *Operation) inexactSolution () (solution float64, err error) { | func (operation *Operation) inexactSolution () (solution float64, err error) { | ||||||
| 	var subSolution float64 | 	var subSolution float64 | ||||||
| 	var rawSolution uint64 |  | ||||||
| 	 | 	 | ||||||
| 	switch operation.opcode { | 	switch operation.opcode { | ||||||
| 	case OpcodeAdd: | 	case OpcodeAdd: | ||||||
| @ -271,88 +270,10 @@ func (operation *Operation) inexactSolution () (solution float64, err error) { | |||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
| 	 | 	 | ||||||
| 	case OpcodeOr: | 	case | ||||||
| 		for _, operand := range operation.operands { | 		OpcodeOr, OpcodeNot, OpcodeAnd, OpcodeXor, OpcodeLeftShift, | ||||||
| 			subSolution, err = operand.InexactSolution() | 		OpcodeRightShift: | ||||||
| 			if err != nil { return } | 		err = ErrorWrongType | ||||||
| 			rawSolution |= math.Float64bits(subSolution) |  | ||||||
| 		} |  | ||||||
| 		solution = math.Float64frombits(rawSolution) |  | ||||||
| 		 |  | ||||||
| 	case OpcodeNot: |  | ||||||
| 		if len(operation.operands) != 1 { |  | ||||||
| 			err = ErrorWrongOperandCount |  | ||||||
| 			return |  | ||||||
| 		} |  | ||||||
| 
 |  | ||||||
| 		subSolution, err = operation.operands[0].InexactSolution() |  | ||||||
| 		solution = math.Float64frombits(^math.Float64bits(subSolution)) |  | ||||||
| 		 |  | ||||||
| 	case OpcodeAnd: |  | ||||||
| 		for index, operand := range operation.operands { |  | ||||||
| 			subSolution, err = operand.InexactSolution() |  | ||||||
| 			if err != nil { return } |  | ||||||
| 			if index == 0 { |  | ||||||
| 				rawSolution = math.Float64bits(subSolution) |  | ||||||
| 			} else { |  | ||||||
| 				rawSolution &= math.Float64bits(subSolution) |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 		solution = math.Float64frombits(rawSolution) |  | ||||||
| 		 |  | ||||||
| 	case OpcodeXor: |  | ||||||
| 		for index, operand := range operation.operands { |  | ||||||
| 			subSolution, err = operand.InexactSolution() |  | ||||||
| 			if err != nil { return } |  | ||||||
| 			if index == 0 { |  | ||||||
| 				rawSolution = math.Float64bits(subSolution) |  | ||||||
| 			} else { |  | ||||||
| 				rawSolution ^= math.Float64bits(subSolution) |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 		solution = math.Float64frombits(rawSolution) |  | ||||||
| 		 |  | ||||||
| 	case OpcodeLeftShift: |  | ||||||
| 		if len(operation.operands) != 2 { |  | ||||||
| 			err = ErrorWrongOperandCount |  | ||||||
| 			return |  | ||||||
| 		} |  | ||||||
| 
 |  | ||||||
| 		var left, right float64 |  | ||||||
| 		left, err = operation.operands[0].InexactSolution() |  | ||||||
| 		if err != nil { return } |  | ||||||
| 		right, err = operation.operands[1].InexactSolution() |  | ||||||
| 		if err != nil { return } |  | ||||||
| 
 |  | ||||||
| 		if right < 0 { |  | ||||||
| 			err = ErrorNegativeShiftAmount |  | ||||||
| 			return |  | ||||||
| 		} |  | ||||||
| 
 |  | ||||||
| 		solution = math.Float64frombits ( |  | ||||||
| 			math.Float64bits(left) << |  | ||||||
| 			math.Float64bits(right)) |  | ||||||
| 		 |  | ||||||
| 	case OpcodeRightShift: |  | ||||||
| 		if len(operation.operands) != 2 { |  | ||||||
| 			err = ErrorWrongOperandCount |  | ||||||
| 			return |  | ||||||
| 		} |  | ||||||
| 
 |  | ||||||
| 		var left, right float64 |  | ||||||
| 		left, err = operation.operands[0].InexactSolution() |  | ||||||
| 		if err != nil { return } |  | ||||||
| 		right, err = operation.operands[1].InexactSolution() |  | ||||||
| 		if err != nil { return } |  | ||||||
| 
 |  | ||||||
| 		if right < 0 { |  | ||||||
| 			err = ErrorNegativeShiftAmount |  | ||||||
| 			return |  | ||||||
| 		} |  | ||||||
| 
 |  | ||||||
| 		solution = math.Float64frombits ( |  | ||||||
| 			math.Float64bits(left) >> |  | ||||||
| 			math.Float64bits(right)) |  | ||||||
| 		 | 		 | ||||||
| 	case OpcodeMean: | 	case OpcodeMean: | ||||||
| 		if len(operation.operands) == 0 { break } | 		if len(operation.operands) == 0 { break } | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user