Browse Source

Using UINT64_C to get 64-bit integers working on other C++ compilers.

David Piuva 5 years ago
parent
commit
eb2e242d27
2 changed files with 171 additions and 174 deletions
  1. 171 171
      Source/DFPSR/math/FixedPoint.cpp
  2. 0 3
      Source/DFPSR/math/FixedPoint.h

+ 171 - 171
Source/DFPSR/math/FixedPoint.cpp

@@ -55,177 +55,177 @@ const int maxDecimals = 19;
 // Each group of 9 values contains the digit fractions for a certain location
 // Each group of 9 values contains the digit fractions for a certain location
 static const uint64_t decimalFractions64[maxDecimals * 9] = {
 static const uint64_t decimalFractions64[maxDecimals * 9] = {
 	// Calculated using the Wolfram expression "round(18446744073709551616 * 1 / 10)" et cetera...
 	// Calculated using the Wolfram expression "round(18446744073709551616 * 1 / 10)" et cetera...
-	 1844674407370955162ull, // 2^64 * 0.1
-	 3689348814741910323ull, // 2^64 * 0.2
-	 5534023222112865485ull, // 2^64 * 0.3
-	 7378697629483820646ull, // 2^64 * 0.4
-	 9223372036854775808ull, // 2^64 * 0.5
-	11068046444225730970ull, // 2^64 * 0.6
-	12912720851596686131ull, // 2^64 * 0.7
-	14757395258967641293ull, // 2^64 * 0.8
-	16602069666338596454ull, // 2^64 * 0.9
-	 184467440737095516ull, // 2^64 * 0.01
-	 368934881474191032ull, // 2^64 * 0.02
-	 553402322211286548ull, // 2^64 * 0.03
-	 737869762948382065ull, // 2^64 * 0.04
-	 922337203685477581ull, // 2^64 * 0.05
-	1106804644422573097ull, // 2^64 * 0.06
-	1291272085159668613ull, // 2^64 * 0.07
-	1475739525896764129ull, // 2^64 * 0.08
-	1660206966633859645ull, // 2^64 * 0.09
-	 18446744073709552ull, // 2^64 * 0.001
-	 36893488147419103ull, // 2^64 * 0.002
-	 55340232221128655ull, // 2^64 * 0.003
-	 73786976294838206ull, // 2^64 * 0.004
-	 92233720368547758ull, // 2^64 * 0.005
-	110680464442257310ull, // 2^64 * 0.006
-	129127208515966861ull, // 2^64 * 0.007
-	147573952589676413ull, // 2^64 * 0.008
-	166020696663385965ull, // 2^64 * 0.009
-	 1844674407370955ull, // 2^64 * 0.0001
-	 3689348814741910ull, // 2^64 * 0.0002
-	 5534023222112865ull, // 2^64 * 0.0003
-	 7378697629483821ull, // 2^64 * 0.0004
-	 9223372036854776ull, // 2^64 * 0.0005
-	11068046444225731ull, // 2^64 * 0.0006
-	12912720851596686ull, // 2^64 * 0.0007
-	14757395258967641ull, // 2^64 * 0.0008
-	16602069666338596ull, // 2^64 * 0.0009
-	 184467440737096ull, // 2^64 * 0.00001
-	 368934881474191ull, // 2^64 * 0.00002
-	 553402322211287ull, // 2^64 * 0.00003
-	 737869762948382ull, // 2^64 * 0.00004
-	 922337203685478ull, // 2^64 * 0.00005
-	1106804644422573ull, // 2^64 * 0.00006
-	1291272085159669ull, // 2^64 * 0.00007
-	1475739525896764ull, // 2^64 * 0.00008
-	1660206966633860ull, // 2^64 * 0.00009
-	 18446744073710ull, // 2^64 * 0.000001
-	 36893488147419ull, // 2^64 * 0.000002
-	 55340232221129ull, // 2^64 * 0.000003
-	 73786976294838ull, // 2^64 * 0.000004
-	 92233720368548ull, // 2^64 * 0.000005
-	110680464442257ull, // 2^64 * 0.000006
-	129127208515967ull, // 2^64 * 0.000007
-	147573952589676ull, // 2^64 * 0.000008
-	166020696663386ull, // 2^64 * 0.000009
-	 1844674407371ull, // 2^64 * 0.0000001
-	 3689348814742ull, // 2^64 * 0.0000002
-	 5534023222113ull, // 2^64 * 0.0000003
-	 7378697629484ull, // 2^64 * 0.0000004
-	 9223372036855ull, // 2^64 * 0.0000005
-	11068046444226ull, // 2^64 * 0.0000006
-	12912720851597ull, // 2^64 * 0.0000007
-	14757395258968ull, // 2^64 * 0.0000008
-	16602069666339ull, // 2^64 * 0.0000009
-	 184467440737ull, // 2^64 * 0.00000001
-	 368934881474ull, // 2^64 * 0.00000002
-	 553402322211ull, // 2^64 * 0.00000003
-	 737869762948ull, // 2^64 * 0.00000004
-	 922337203685ull, // 2^64 * 0.00000005
-	1106804644423ull, // 2^64 * 0.00000006
-	1291272085160ull, // 2^64 * 0.00000007
-	1475739525897ull, // 2^64 * 0.00000008
-	1660206966634ull, // 2^64 * 0.00000009
-	 18446744074ull, // 2^64 * 0.000000001
-	 36893488147ull, // 2^64 * 0.000000002
-	 55340232221ull, // 2^64 * 0.000000003
-	 73786976295ull, // 2^64 * 0.000000004
-	 92233720369ull, // 2^64 * 0.000000005
-	110680464442ull, // 2^64 * 0.000000006
-	129127208516ull, // 2^64 * 0.000000007
-	147573952590ull, // 2^64 * 0.000000008
-	166020696663ull, // 2^64 * 0.000000009
-	 1844674407ull, // 2^64 * 0.0000000001
-	 3689348815ull, // 2^64 * 0.0000000002
-	 5534023222ull, // 2^64 * 0.0000000003
-	 7378697629ull, // 2^64 * 0.0000000004
-	 9223372037ull, // 2^64 * 0.0000000005
-	11068046444ull, // 2^64 * 0.0000000006
-	12912720852ull, // 2^64 * 0.0000000007
-	14757395259ull, // 2^64 * 0.0000000008
-	16602069666ull, // 2^64 * 0.0000000009
-	 184467441ull, // 2^64 * 0.00000000001
-	 368934881ull, // 2^64 * 0.00000000002
-	 553402322ull, // 2^64 * 0.00000000003
-	 737869763ull, // 2^64 * 0.00000000004
-	 922337204ull, // 2^64 * 0.00000000005
-	1106804644ull, // 2^64 * 0.00000000006
-	1291272085ull, // 2^64 * 0.00000000007
-	1475739526ull, // 2^64 * 0.00000000008
-	1660206967ull, // 2^64 * 0.00000000009
-	 18446744ull, // 2^64 * 0.000000000001
-	 36893488ull, // 2^64 * 0.000000000002
-	 55340232ull, // 2^64 * 0.000000000003
-	 73786976ull, // 2^64 * 0.000000000004
-	 92233720ull, // 2^64 * 0.000000000005
-	110680464ull, // 2^64 * 0.000000000006
-	129127209ull, // 2^64 * 0.000000000007
-	147573953ull, // 2^64 * 0.000000000008
-	166020697ull, // 2^64 * 0.000000000009
-	 1844674ull, // 2^64 * 0.0000000000001
-	 3689349ull, // 2^64 * 0.0000000000002
-	 5534023ull, // 2^64 * 0.0000000000003
-	 7378698ull, // 2^64 * 0.0000000000004
-	 9223372ull, // 2^64 * 0.0000000000005
-	11068046ull, // 2^64 * 0.0000000000006
-	12912721ull, // 2^64 * 0.0000000000007
-	14757395ull, // 2^64 * 0.0000000000008
-	16602070ull, // 2^64 * 0.0000000000009
-	 184467ull, // 2^64 * 0.00000000000001
-	 368935ull, // 2^64 * 0.00000000000002
-	 553402ull, // 2^64 * 0.00000000000003
-	 737870ull, // 2^64 * 0.00000000000004
-	 922337ull, // 2^64 * 0.00000000000005
-	1106805ull, // 2^64 * 0.00000000000006
-	1291272ull, // 2^64 * 0.00000000000007
-	1475740ull, // 2^64 * 0.00000000000008
-	1660207ull, // 2^64 * 0.00000000000009
-	 18447ull, // 2^64 * 0.000000000000001
-	 36893ull, // 2^64 * 0.000000000000002
-	 55340ull, // 2^64 * 0.000000000000003
-	 73787ull, // 2^64 * 0.000000000000004
-	 92234ull, // 2^64 * 0.000000000000005
-	110680ull, // 2^64 * 0.000000000000006
-	129127ull, // 2^64 * 0.000000000000007
-	147574ull, // 2^64 * 0.000000000000008
-	166021ull, // 2^64 * 0.000000000000009
-	 1845ull, // 2^64 * 0.0000000000000001
-	 3689ull, // 2^64 * 0.0000000000000002
-	 5534ull, // 2^64 * 0.0000000000000003
-	 7379ull, // 2^64 * 0.0000000000000004
-	 9223ull, // 2^64 * 0.0000000000000005
-	11068ull, // 2^64 * 0.0000000000000006
-	12913ull, // 2^64 * 0.0000000000000007
-	14757ull, // 2^64 * 0.0000000000000008
-	16602ull, // 2^64 * 0.0000000000000009
-	 184ull, // 2^64 * 0.00000000000000001
-	 369ull, // 2^64 * 0.00000000000000002
-	 553ull, // 2^64 * 0.00000000000000003
-	 738ull, // 2^64 * 0.00000000000000004
-	 922ull, // 2^64 * 0.00000000000000005
-	1107ull, // 2^64 * 0.00000000000000006
-	1291ull, // 2^64 * 0.00000000000000007
-	1476ull, // 2^64 * 0.00000000000000008
-	1660ull, // 2^64 * 0.00000000000000009
-	 18ull, // 2^64 * 0.000000000000000001
-	 37ull, // 2^64 * 0.000000000000000002
-	 55ull, // 2^64 * 0.000000000000000003
-	 74ull, // 2^64 * 0.000000000000000004
-	 92ull, // 2^64 * 0.000000000000000005
-	111ull, // 2^64 * 0.000000000000000006
-	129ull, // 2^64 * 0.000000000000000007
-	148ull, // 2^64 * 0.000000000000000008
-	166ull, // 2^64 * 0.000000000000000009
-	 2ull, // 2^64 * 0.0000000000000000001
-	 4ull, // 2^64 * 0.0000000000000000002
-	 6ull, // 2^64 * 0.0000000000000000003
-	 7ull, // 2^64 * 0.0000000000000000004
-	 9ull, // 2^64 * 0.0000000000000000005
-	11ull, // 2^64 * 0.0000000000000000006
-	13ull, // 2^64 * 0.0000000000000000007
-	15ull, // 2^64 * 0.0000000000000000008
-	17ull, // 2^64 * 0.0000000000000000009
+	UINT64_C( 1844674407370955162), // 2^64 * 0.1
+	UINT64_C( 3689348814741910323), // 2^64 * 0.2
+	UINT64_C( 5534023222112865485), // 2^64 * 0.3
+	UINT64_C( 7378697629483820646), // 2^64 * 0.4
+	UINT64_C( 9223372036854775808), // 2^64 * 0.5
+	UINT64_C(11068046444225730970), // 2^64 * 0.6
+	UINT64_C(12912720851596686131), // 2^64 * 0.7
+	UINT64_C(14757395258967641293), // 2^64 * 0.8
+	UINT64_C(16602069666338596454), // 2^64 * 0.9
+	UINT64_C( 184467440737095516), // 2^64 * 0.01
+	UINT64_C( 368934881474191032), // 2^64 * 0.02
+	UINT64_C( 553402322211286548), // 2^64 * 0.03
+	UINT64_C( 737869762948382065), // 2^64 * 0.04
+	UINT64_C( 922337203685477581), // 2^64 * 0.05
+	UINT64_C(1106804644422573097), // 2^64 * 0.06
+	UINT64_C(1291272085159668613), // 2^64 * 0.07
+	UINT64_C(1475739525896764129), // 2^64 * 0.08
+	UINT64_C(1660206966633859645), // 2^64 * 0.09
+	UINT64_C( 18446744073709552), // 2^64 * 0.001
+	UINT64_C( 36893488147419103), // 2^64 * 0.002
+	UINT64_C( 55340232221128655), // 2^64 * 0.003
+	UINT64_C( 73786976294838206), // 2^64 * 0.004
+	UINT64_C( 92233720368547758), // 2^64 * 0.005
+	UINT64_C(110680464442257310), // 2^64 * 0.006
+	UINT64_C(129127208515966861), // 2^64 * 0.007
+	UINT64_C(147573952589676413), // 2^64 * 0.008
+	UINT64_C(166020696663385965), // 2^64 * 0.009
+	UINT64_C( 1844674407370955), // 2^64 * 0.0001
+	UINT64_C( 3689348814741910), // 2^64 * 0.0002
+	UINT64_C( 5534023222112865), // 2^64 * 0.0003
+	UINT64_C( 7378697629483821), // 2^64 * 0.0004
+	UINT64_C( 9223372036854776), // 2^64 * 0.0005
+	UINT64_C(11068046444225731), // 2^64 * 0.0006
+	UINT64_C(12912720851596686), // 2^64 * 0.0007
+	UINT64_C(14757395258967641), // 2^64 * 0.0008
+	UINT64_C(16602069666338596), // 2^64 * 0.0009
+	UINT64_C( 184467440737096), // 2^64 * 0.00001
+	UINT64_C( 368934881474191), // 2^64 * 0.00002
+	UINT64_C( 553402322211287), // 2^64 * 0.00003
+	UINT64_C( 737869762948382), // 2^64 * 0.00004
+	UINT64_C( 922337203685478), // 2^64 * 0.00005
+	UINT64_C(1106804644422573), // 2^64 * 0.00006
+	UINT64_C(1291272085159669), // 2^64 * 0.00007
+	UINT64_C(1475739525896764), // 2^64 * 0.00008
+	UINT64_C(1660206966633860), // 2^64 * 0.00009
+	UINT64_C( 18446744073710), // 2^64 * 0.000001
+	UINT64_C( 36893488147419), // 2^64 * 0.000002
+	UINT64_C( 55340232221129), // 2^64 * 0.000003
+	UINT64_C( 73786976294838), // 2^64 * 0.000004
+	UINT64_C( 92233720368548), // 2^64 * 0.000005
+	UINT64_C(110680464442257), // 2^64 * 0.000006
+	UINT64_C(129127208515967), // 2^64 * 0.000007
+	UINT64_C(147573952589676), // 2^64 * 0.000008
+	UINT64_C(166020696663386), // 2^64 * 0.000009
+	UINT64_C( 1844674407371), // 2^64 * 0.0000001
+	UINT64_C( 3689348814742), // 2^64 * 0.0000002
+	UINT64_C( 5534023222113), // 2^64 * 0.0000003
+	UINT64_C( 7378697629484), // 2^64 * 0.0000004
+	UINT64_C( 9223372036855), // 2^64 * 0.0000005
+	UINT64_C(11068046444226), // 2^64 * 0.0000006
+	UINT64_C(12912720851597), // 2^64 * 0.0000007
+	UINT64_C(14757395258968), // 2^64 * 0.0000008
+	UINT64_C(16602069666339), // 2^64 * 0.0000009
+	UINT64_C( 184467440737), // 2^64 * 0.00000001
+	UINT64_C( 368934881474), // 2^64 * 0.00000002
+	UINT64_C( 553402322211), // 2^64 * 0.00000003
+	UINT64_C( 737869762948), // 2^64 * 0.00000004
+	UINT64_C( 922337203685), // 2^64 * 0.00000005
+	UINT64_C(1106804644423), // 2^64 * 0.00000006
+	UINT64_C(1291272085160), // 2^64 * 0.00000007
+	UINT64_C(1475739525897), // 2^64 * 0.00000008
+	UINT64_C(1660206966634), // 2^64 * 0.00000009
+	UINT64_C( 18446744074), // 2^64 * 0.000000001
+	UINT64_C( 36893488147), // 2^64 * 0.000000002
+	UINT64_C( 55340232221), // 2^64 * 0.000000003
+	UINT64_C( 73786976295), // 2^64 * 0.000000004
+	UINT64_C( 92233720369), // 2^64 * 0.000000005
+	UINT64_C(110680464442), // 2^64 * 0.000000006
+	UINT64_C(129127208516), // 2^64 * 0.000000007
+	UINT64_C(147573952590), // 2^64 * 0.000000008
+	UINT64_C(166020696663), // 2^64 * 0.000000009
+	UINT64_C( 1844674407), // 2^64 * 0.0000000001
+	UINT64_C( 3689348815), // 2^64 * 0.0000000002
+	UINT64_C( 5534023222), // 2^64 * 0.0000000003
+	UINT64_C( 7378697629), // 2^64 * 0.0000000004
+	UINT64_C( 9223372037), // 2^64 * 0.0000000005
+	UINT64_C(11068046444), // 2^64 * 0.0000000006
+	UINT64_C(12912720852), // 2^64 * 0.0000000007
+	UINT64_C(14757395259), // 2^64 * 0.0000000008
+	UINT64_C(16602069666), // 2^64 * 0.0000000009
+	UINT64_C( 184467441), // 2^64 * 0.00000000001
+	UINT64_C( 368934881), // 2^64 * 0.00000000002
+	UINT64_C( 553402322), // 2^64 * 0.00000000003
+	UINT64_C( 737869763), // 2^64 * 0.00000000004
+	UINT64_C( 922337204), // 2^64 * 0.00000000005
+	UINT64_C(1106804644), // 2^64 * 0.00000000006
+	UINT64_C(1291272085), // 2^64 * 0.00000000007
+	UINT64_C(1475739526), // 2^64 * 0.00000000008
+	UINT64_C(1660206967), // 2^64 * 0.00000000009
+	UINT64_C( 18446744), // 2^64 * 0.000000000001
+	UINT64_C( 36893488), // 2^64 * 0.000000000002
+	UINT64_C( 55340232), // 2^64 * 0.000000000003
+	UINT64_C( 73786976), // 2^64 * 0.000000000004
+	UINT64_C( 92233720), // 2^64 * 0.000000000005
+	UINT64_C(110680464), // 2^64 * 0.000000000006
+	UINT64_C(129127209), // 2^64 * 0.000000000007
+	UINT64_C(147573953), // 2^64 * 0.000000000008
+	UINT64_C(166020697), // 2^64 * 0.000000000009
+	UINT64_C( 1844674), // 2^64 * 0.0000000000001
+	UINT64_C( 3689349), // 2^64 * 0.0000000000002
+	UINT64_C( 5534023), // 2^64 * 0.0000000000003
+	UINT64_C( 7378698), // 2^64 * 0.0000000000004
+	UINT64_C( 9223372), // 2^64 * 0.0000000000005
+	UINT64_C(11068046), // 2^64 * 0.0000000000006
+	UINT64_C(12912721), // 2^64 * 0.0000000000007
+	UINT64_C(14757395), // 2^64 * 0.0000000000008
+	UINT64_C(16602070), // 2^64 * 0.0000000000009
+	UINT64_C( 184467), // 2^64 * 0.00000000000001
+	UINT64_C( 368935), // 2^64 * 0.00000000000002
+	UINT64_C( 553402), // 2^64 * 0.00000000000003
+	UINT64_C( 737870), // 2^64 * 0.00000000000004
+	UINT64_C( 922337), // 2^64 * 0.00000000000005
+	UINT64_C(1106805), // 2^64 * 0.00000000000006
+	UINT64_C(1291272), // 2^64 * 0.00000000000007
+	UINT64_C(1475740), // 2^64 * 0.00000000000008
+	UINT64_C(1660207), // 2^64 * 0.00000000000009
+	UINT64_C( 18447), // 2^64 * 0.000000000000001
+	UINT64_C( 36893), // 2^64 * 0.000000000000002
+	UINT64_C( 55340), // 2^64 * 0.000000000000003
+	UINT64_C( 73787), // 2^64 * 0.000000000000004
+	UINT64_C( 92234), // 2^64 * 0.000000000000005
+	UINT64_C(110680), // 2^64 * 0.000000000000006
+	UINT64_C(129127), // 2^64 * 0.000000000000007
+	UINT64_C(147574), // 2^64 * 0.000000000000008
+	UINT64_C(166021), // 2^64 * 0.000000000000009
+	UINT64_C( 1845), // 2^64 * 0.0000000000000001
+	UINT64_C( 3689), // 2^64 * 0.0000000000000002
+	UINT64_C( 5534), // 2^64 * 0.0000000000000003
+	UINT64_C( 7379), // 2^64 * 0.0000000000000004
+	UINT64_C( 9223), // 2^64 * 0.0000000000000005
+	UINT64_C(11068), // 2^64 * 0.0000000000000006
+	UINT64_C(12913), // 2^64 * 0.0000000000000007
+	UINT64_C(14757), // 2^64 * 0.0000000000000008
+	UINT64_C(16602), // 2^64 * 0.0000000000000009
+	UINT64_C( 184), // 2^64 * 0.00000000000000001
+	UINT64_C( 369), // 2^64 * 0.00000000000000002
+	UINT64_C( 553), // 2^64 * 0.00000000000000003
+	UINT64_C( 738), // 2^64 * 0.00000000000000004
+	UINT64_C( 922), // 2^64 * 0.00000000000000005
+	UINT64_C(1107), // 2^64 * 0.00000000000000006
+	UINT64_C(1291), // 2^64 * 0.00000000000000007
+	UINT64_C(1476), // 2^64 * 0.00000000000000008
+	UINT64_C(1660), // 2^64 * 0.00000000000000009
+	UINT64_C( 18), // 2^64 * 0.000000000000000001
+	UINT64_C( 37), // 2^64 * 0.000000000000000002
+	UINT64_C( 55), // 2^64 * 0.000000000000000003
+	UINT64_C( 74), // 2^64 * 0.000000000000000004
+	UINT64_C( 92), // 2^64 * 0.000000000000000005
+	UINT64_C(111), // 2^64 * 0.000000000000000006
+	UINT64_C(129), // 2^64 * 0.000000000000000007
+	UINT64_C(148), // 2^64 * 0.000000000000000008
+	UINT64_C(166), // 2^64 * 0.000000000000000009
+	UINT64_C( 2), // 2^64 * 0.0000000000000000001
+	UINT64_C( 4), // 2^64 * 0.0000000000000000002
+	UINT64_C( 6), // 2^64 * 0.0000000000000000003
+	UINT64_C( 7), // 2^64 * 0.0000000000000000004
+	UINT64_C( 9), // 2^64 * 0.0000000000000000005
+	UINT64_C(11), // 2^64 * 0.0000000000000000006
+	UINT64_C(13), // 2^64 * 0.0000000000000000007
+	UINT64_C(15), // 2^64 * 0.0000000000000000008
+	UINT64_C(17), // 2^64 * 0.0000000000000000009
 };
 };
 // Index 0 returns 0.1 in the 64-bit fraction system
 // Index 0 returns 0.1 in the 64-bit fraction system
 // Index 1 represents 0.01, et cetera
 // Index 1 represents 0.01, et cetera

+ 0 - 3
Source/DFPSR/math/FixedPoint.h

@@ -51,7 +51,6 @@ private:
 	int32_t mantissa = 0;
 	int32_t mantissa = 0;
 public:
 public:
 	FixedPoint();
 	FixedPoint();
-	// TODO: Can comparisons use an implicit conversion from whole integers to reduce complexity?
 	explicit FixedPoint(int64_t newMantissa);
 	explicit FixedPoint(int64_t newMantissa);
 	static FixedPoint fromWhole(int64_t wholeInteger);
 	static FixedPoint fromWhole(int64_t wholeInteger);
 	static FixedPoint fromMantissa(int64_t mantissa);
 	static FixedPoint fromMantissa(int64_t mantissa);
@@ -176,8 +175,6 @@ inline bool operator<=(int64_t left, const FixedPoint &right) {
 	return left * 65536 <= right.getMantissa();
 	return left * 65536 <= right.getMantissa();
 }
 }
 
 
-// TODO: Equality and other comparisons
-
 }
 }
 
 
 #endif
 #endif