add morphisms for angle, temperature & real numbers
This commit is contained in:
parent
6f85e004b9
commit
65cd0b6853
3 changed files with 211 additions and 0 deletions
72
morphisms/angle.morphism-base
Normal file
72
morphisms/angle.morphism-base
Normal file
|
@ -0,0 +1,72 @@
|
|||
```
|
||||
#define PHI 6.28318530718
|
||||
```
|
||||
|
||||
morph_angle_as_degrees_to_turns_float ()
|
||||
Angle ~ Degrees ~ ℝ ~ native.Float
|
||||
--> Angle ~ Turns ~ ℝ ~ native.Float
|
||||
```
|
||||
*dst = *src / 360.0;
|
||||
return 0;
|
||||
```
|
||||
|
||||
morph_angle_as_degrees_to_turns_double ()
|
||||
Angle ~ Degrees ~ ℝ ~ native.Double
|
||||
--> Angle ~ Turns ~ ℝ ~ native.Double
|
||||
```
|
||||
*dst = *src / 360.0;
|
||||
return 0;
|
||||
```
|
||||
|
||||
|
||||
morph_angle_as_turns_to_degrees_float ()
|
||||
Angle ~ Turns ~ ℝ ~ native.Float
|
||||
--> Angle ~ Degrees ~ ℝ ~ native.Float
|
||||
```
|
||||
*dst = *src * 360.0;
|
||||
return 0;
|
||||
```
|
||||
|
||||
morph_angle_as_turns_to_degrees_double ()
|
||||
Angle ~ Turns ~ ℝ ~ native.Double
|
||||
--> Angle ~ Degrees ~ ℝ ~ native.Double
|
||||
```
|
||||
*dst = *src * 360.0;
|
||||
return 0;
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
morph_angle_as_radians_to_turns_float ()
|
||||
Angle ~ Radians ~ ℝ ~ native.Float
|
||||
--> Angle ~ Turns ~ ℝ ~ native.Float
|
||||
```
|
||||
*dst = *src / PHI;
|
||||
return 0;
|
||||
```
|
||||
|
||||
morph_angle_as_radians_to_turns_double ()
|
||||
Angle ~ Radians ~ ℝ ~ native.Double
|
||||
--> Angle ~ Turns ~ ℝ ~ native.Double
|
||||
```
|
||||
*dst = *src / PHI;
|
||||
return 0;
|
||||
```
|
||||
|
||||
|
||||
morph_angle_as_turns_to_radians_float ()
|
||||
Angle ~ Turns ~ ℝ ~ native.Float
|
||||
--> Angle ~ Radians ~ ℝ ~ native.Float
|
||||
```
|
||||
*dst = *src * PHI;
|
||||
return 0;
|
||||
```
|
||||
|
||||
morph_angle_as_degrees_to_radians_double ()
|
||||
Angle ~ Turns ~ ℝ ~ native.Double
|
||||
--> Angle ~ Radians ~ ℝ ~ native.Double
|
||||
```
|
||||
*dst = *src * PHI;
|
||||
return 0;
|
||||
```
|
105
morphisms/real.morphism-base
Normal file
105
morphisms/real.morphism-base
Normal file
|
@ -0,0 +1,105 @@
|
|||
```
|
||||
#include <stdio.h>
|
||||
```
|
||||
|
||||
morph_real_as_decimalstr_to_float ()
|
||||
ℝ ~ <PosInt 10 BigEndian> ~ <Seq~<ValueTerminated 0> <Digit 10>~Char~Ascii~x86.UInt8>
|
||||
--> ℝ ~ native.Float
|
||||
```
|
||||
sscanf(src, "%f", dst);
|
||||
return 0;
|
||||
```
|
||||
|
||||
morph_real_as_decimalstr_to_double ()
|
||||
ℝ ~ <PosInt 10 BigEndian> ~ <Seq~<ValueTerminated 0> <Digit 10>~Char~Ascii~x86.UInt8>
|
||||
--> ℝ ~ native.Double
|
||||
```
|
||||
sscanf(src, "%lf", dst);
|
||||
return 0;
|
||||
```
|
||||
|
||||
morph_real_as_float_to_decimalstr ()
|
||||
ℝ ~ native.Float
|
||||
--> ℝ ~ <PosInt 10 BigEndian> ~ <Seq~<ValueTerminated 0> <Digit 10>~Char~Ascii~x86.UInt8>
|
||||
```
|
||||
sprintf(dst, "%f", *src);
|
||||
return 0;
|
||||
```
|
||||
|
||||
morph_real_as_double_to_decimalstr ()
|
||||
ℝ ~ native.Double
|
||||
--> ℝ ~ <PosInt 10 BigEndian> ~ <Seq~<ValueTerminated 0> <Digit 10>~Char~Ascii~x86.UInt8>
|
||||
```
|
||||
sprintf(dst, "%f", *src);
|
||||
return 0;
|
||||
```
|
||||
|
||||
|
||||
morph_real_as_float_to_double ()
|
||||
ℝ ~ native.Float
|
||||
--> ℝ ~ native.Double
|
||||
```
|
||||
*dst = *src;
|
||||
return 0;
|
||||
```
|
||||
|
||||
morph_real_as_double_to_float ()
|
||||
ℝ ~ native.Double
|
||||
--> ℝ ~ native.Float
|
||||
```
|
||||
fprintf(stderr, "Warning: morphin Double -> Float. Precision loss!");
|
||||
*dst = *src;
|
||||
return 0;
|
||||
```
|
||||
|
||||
morph_real_as_u64_to_float ()
|
||||
ℝ ~ ℕ ~ x86.UInt64
|
||||
--> ℝ ~ native.Float
|
||||
```
|
||||
fprintf(stderr, "Warning: morphin UInt64 -> Float. Precision loss!");
|
||||
*dst = *src;
|
||||
return 0;
|
||||
```
|
||||
|
||||
morph_real_as_u64_to_double ()
|
||||
ℝ ~ ℕ ~ x86.UInt64
|
||||
--> ℝ ~ native.Double
|
||||
```
|
||||
fprintf(stderr, "Warning: morphin UInt64 -> Double. Precision loss!");
|
||||
*dst = *src;
|
||||
return 0;
|
||||
```
|
||||
|
||||
morph_real_as_quantized_linear_to_float (Begin: ℝ, End: ℝ, Steps: ℤ)
|
||||
ℝ ~ <QuantizedLinear Begin End Steps> ~ ℕ ~ x86.UInt64
|
||||
--> ℝ ~ native.Float
|
||||
```
|
||||
*dst = (float)Begin + ( *src * ((float)End - (float)Begin) ) / (float)Steps;
|
||||
return 0;
|
||||
```
|
||||
|
||||
morph_real_as_float_to_quantized_linear (Begin: ℝ, End: ℝ, Steps: ℤ)
|
||||
ℝ ~ native.Float
|
||||
--> ℝ ~ <QuantizedLinear Begin End Steps> ~ ℕ ~ x86.UInt64
|
||||
```
|
||||
*dst = ((*src - (float)Begin) * (float)Steps) / ((float)End - (float)Begin);
|
||||
return 0;
|
||||
```
|
||||
|
||||
|
||||
|
||||
morph_real_as_quantized_linear_to_double (Begin: ℝ, End: ℝ, Steps: ℤ)
|
||||
ℝ ~ <QuantizedLinear Begin End Steps> ~ ℕ ~ x86.UInt64
|
||||
--> ℝ ~ native.Double
|
||||
```
|
||||
*dst = (double)Begin + ( *src * ((double)End - (double)Begin) ) / (double)Steps;
|
||||
return 0;
|
||||
```
|
||||
|
||||
morph_real_as_double_to_quantized_linear (Begin: ℝ, End: ℝ, Steps: ℤ)
|
||||
ℝ ~ native.Double
|
||||
--> ℝ ~ <QuantizedLinear Begin End Steps> ~ ℕ ~ x86.UInt64
|
||||
```
|
||||
*dst = ((*src - (double)Begin) * (double)Steps) / ((double)End - (double)Begin);
|
||||
return 0;
|
||||
```
|
34
morphisms/temperature.morphism-base
Normal file
34
morphisms/temperature.morphism-base
Normal file
|
@ -0,0 +1,34 @@
|
|||
```
|
||||
```
|
||||
|
||||
morph_celsius_to_kelvin ()
|
||||
Temperature ~ Celsius ~ ℝ ~ native.Float
|
||||
--> Temperature ~ Kelvin ~ ℝ ~ native.Float
|
||||
```
|
||||
*dst = *src + 273.15;
|
||||
return 0;
|
||||
```
|
||||
|
||||
morph_kelvin_to_celsius ()
|
||||
Temperature ~ Kelvin ~ ℝ ~ native.Float
|
||||
--> Temperature ~ Celsius ~ ℝ ~ native.Float
|
||||
```
|
||||
*dst = *src - 273.15;
|
||||
return 0;
|
||||
```
|
||||
|
||||
morph_celsius_to_fahrenheit ()
|
||||
Temperature ~ Celsius ~ ℝ ~ native.Float
|
||||
--> Temperature ~ Fahrenheit ~ ℝ ~ native.Float
|
||||
```
|
||||
*dst = (*src * 9.0 / 5.0) + 32.0;
|
||||
return 0;
|
||||
```
|
||||
|
||||
morph_fahrenheit_to_celsius ()
|
||||
Temperature ~ Fahrenheit ~ ℝ ~ native.Float
|
||||
--> Temperature ~ Celsius ~ ℝ ~ native.Float
|
||||
```
|
||||
*dst = (*src - 32.0) * 5.0 / 9.0;
|
||||
return 0;
|
||||
```
|
Loading…
Add table
Reference in a new issue