mirror of
				https://github.com/KevinMidboe/linguist.git
				synced 2025-10-29 17:50:22 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			147 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			BlitzBasic
		
	
	
	
	
	
			
		
		
	
	
			147 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			BlitzBasic
		
	
	
	
	
	
| 
 | |
| Local bk = CreateBank(8)
 | |
| PokeFloat bk, 0, -1
 | |
| Print Bin(PeekInt(bk, 0))
 | |
| Print %1000000000000000
 | |
| Print Bin(1 Shl 31)
 | |
| Print $1f
 | |
| Print $ff
 | |
| Print $1f + (127 - 15)
 | |
| Print Hex(%01111111100000000000000000000000)
 | |
| Print Hex(~%11111111100000000000000000000000)
 | |
| 
 | |
| Print Bin(FloatToHalf(-2.5))
 | |
| Print HalfToFloat(FloatToHalf(-200000000000.0))
 | |
| 
 | |
| Print Bin(FToI(-2.5))
 | |
| 
 | |
| WaitKey
 | |
| End
 | |
| 
 | |
| 
 | |
| ; Half-precision (16-bit) arithmetic library
 | |
| ;============================================
 | |
| 
 | |
| Global Half_CBank_
 | |
| 
 | |
| Function FToI(f#)
 | |
| 	If Half_CBank_ = 0 Then Half_CBank_ = CreateBank(4)
 | |
| 	PokeFloat Half_CBank_, 0, f
 | |
| 	Return PeekInt(Half_CBank_, 0)
 | |
| End Function
 | |
| 
 | |
| Function HalfToFloat#(h)
 | |
| 	Local signBit, exponent, fraction, fBits
 | |
| 	
 | |
| 	signBit = (h And 32768) <> 0
 | |
| 	exponent = (h And %0111110000000000) Shr 10
 | |
| 	fraction = (h And %0000001111111111)
 | |
| 	
 | |
| 	If exponent = $1F Then exponent = $FF : ElseIf exponent Then exponent = (exponent - 15) + 127
 | |
| 	fBits = (signBit Shl 31) Or (exponent Shl 23) Or (fraction Shl 13)
 | |
| 	
 | |
| 	If Half_CBank_ = 0 Then Half_CBank_ = CreateBank(4)
 | |
| 	PokeInt Half_CBank_, 0, fBits
 | |
| 	Return PeekFloat(Half_CBank_, 0)
 | |
| End Function
 | |
| 
 | |
| Function FloatToHalf(f#)
 | |
| 	Local signBit, exponent, fraction, fBits
 | |
| 	
 | |
| 	If Half_CBank_ = 0 Then Half_CBank_ = CreateBank(4)
 | |
| 	PokeFloat Half_CBank_, 0, f
 | |
| 	fBits = PeekInt(Half_CBank_, 0)
 | |
| 	
 | |
| 	signBit = (fBits And (1 Shl 31)) <> 0
 | |
| 	exponent = (fBits And $7F800000) Shr 23
 | |
| 	fraction = fBits And $007FFFFF
 | |
| 	
 | |
| 	If exponent
 | |
| 		exponent = exponent - 127
 | |
| 		If Abs(exponent) > $1F
 | |
| 			If exponent <> ($FF - 127) Then fraction = 0
 | |
| 			exponent = $1F * Sgn(exponent)
 | |
| 		Else
 | |
| 			exponent = exponent + 15
 | |
| 		EndIf
 | |
| 		exponent = exponent And %11111
 | |
| 	EndIf
 | |
| 	fraction = fraction Shr 13
 | |
| 	
 | |
| 	Return (signBit Shl 15) Or (exponent Shl 10) Or fraction
 | |
| End Function
 | |
| 
 | |
| Function HalfAdd(l, r)
 | |
| 	
 | |
| End Function
 | |
| 
 | |
| Function HalfSub(l, r)
 | |
| 	
 | |
| End Function
 | |
| 
 | |
| Function HalfMul(l, r)
 | |
| 	
 | |
| End Function
 | |
| 
 | |
| Function HalfDiv(l, r)
 | |
| 	
 | |
| End Function
 | |
| 
 | |
| Function HalfLT(l, r)
 | |
| 	
 | |
| End Function
 | |
| 
 | |
| Function HalfGT(l, r)
 | |
| 	
 | |
| End Function
 | |
| 
 | |
| 
 | |
| ; Double-precision (64-bit) arithmetic library)
 | |
| ;===============================================
 | |
| 
 | |
| Global DoubleOut[1], Double_CBank_
 | |
| 
 | |
| Function DoubleToFloat#(d[1])
 | |
| 	
 | |
| End Function
 | |
| 
 | |
| Function FloatToDouble(f#)
 | |
| 	
 | |
| End Function
 | |
| 
 | |
| Function IntToDouble(i)
 | |
| 	
 | |
| End Function
 | |
| 
 | |
| Function SefToDouble(s, e, f)
 | |
| 	
 | |
| End Function
 | |
| 
 | |
| Function DoubleAdd(l, r)
 | |
| 	
 | |
| End Function
 | |
| 
 | |
| Function DoubleSub(l, r)
 | |
| 	
 | |
| End Function
 | |
| 
 | |
| Function DoubleMul(l, r)
 | |
| 	
 | |
| End Function
 | |
| 
 | |
| Function DoubleDiv(l, r)
 | |
| 	
 | |
| End Function
 | |
| 
 | |
| Function DoubleLT(l, r)
 | |
| 	
 | |
| End Function
 | |
| 
 | |
| Function DoubleGT(l, r)
 | |
| 	
 | |
| End Function
 | |
| 
 | |
| 
 | |
| ;~IDEal Editor Parameters:
 | |
| ;~F#1A#20#2F
 | |
| ;~C#Blitz3D |