kr7
Joined 11 years ago
Joined 11 years ago
"We need to protect minorities and women from the white male oppressors" is basically the slogan of the identity politics wing of the left.
16 Psyche's mass is 2.27·10^19 kg and its orbital speed is 17.34 km/s.
Earth's orbital speed is 29.78 km/s.
So a perfect orbital transfer (not even possible) to get 16 Psyche into Earth's orbit would take an impulse of at least (29780.0 m/s - 17340.0 m/s) · 2.27·10^19 kg = 2.82388·10^23 kg·m/s.
A Saturn V rocket produces 3.51·10^7 N of thrust.
So it would take one Saturn V rocket 8.0452·10^15 seconds to move 16 Psyche, or 2.5511·10^08 years.
If we had 1 million Saturn V rockets, it would take just over 255 years.
The article is saying that suburbs are becoming more like urban areas.
I like the author's evidence that housing prices are falling:
> In that same city in 2012, a typical McMansion would be valued at $477,000, about 274% more than the area's other homes. Today, a McMansion would be valued at $611,000, or 190% above the rest of the market.
Up 28% in price - must be dying!
[1] http://time.com/107808/census-suburbs-grow-city-growth-slows...
[2] http://www.citylab.com/housing/2016/03/2015-us-population-wi...
[3] http://www.businessinsider.com/americans-moving-to-suburbs-r...
[4] https://www.forbes.com/sites/joelkotkin/2013/09/26/americas-...
So the expression "x >= 0.0f && x <= 1.0f" is true for x = -0.
So the bug will still appear for 'double' using just SSE1.
On x86-64, the compiler should default to SSE2.
SSE2 is ~16 years old so compatibility shouldn't be an issue.
For n < 19, "(double)n * (1.0 / 19.0)" evaluates to a double between 0.0 and 1.0, then it is truncated to 0 when it is implicitly converted to unsigned int.
Since there are only 2^32 values for 32-bit integers, it is possible to test all values in under a minute:
#include <stdio.h>
#include <stdint.h>
int main() {
uint32_t n = 0;
do {
uint32_t a = n / 19;
uint32_t b = (double)n * (1.0 / 19.0);
if (a != b) {
printf("Not equal for n = %u\n", n);
}
++n;
} while (n != 0);
}The approximate latencies for Skylake are:
div --> 26 cycles
cvtsi2sd + mulsd + cvttsd2siq --> 6 + 4 + 6 = 16 cycles
I did a quick (and imperfect) microbenchmark, got these results: Real integer division (-Os) --> 1.392s
FPU Multiply (-Os) --> 0.243s
FPU Multiply (-O2) --> 0.197s
Integer Multiply (-O2) --> 0.164s
The code: #include <stdio.h>
int main() {
volatile unsigned x;
for (unsigned n = 0; n < 100000000; ++n) {
#if 1 /* Change to 0 to use FPU. */
/*
Compile with -Os to get GCC to emit div instruction.
-O2 to emit integer multiply.
Clang emits integer multiply, even with -Os.
*/
x = n / 19;
#else
/* Use the FPU. */
x = (double)n * (1.0 / 19.0);
#endif
}
}> IMPORTANT: Useful feedback revealed that some of these measures are seriously flawed. A major update is on the way.
Looking over the results, some of the numbers are off.
On Intel CPUs, FP multiplication is faster than integer division. Might not be true on ARM CPUs which generally have slower FPUs.
On Skylake, for example, 32-bit unsigned integer division has a 26 cycle latency with a throughput of 1 instruction / 6 cycles, while 32/64-bit floating point multiplication has a 4 cycle latency with a throughput of 2 instructions / cycle.
Then you proceed to say that minorities and women are discriminated against, and we need to do something about that. Who is doing this discrimination, then? You point out that white-skinned people tend to hold power in (traditionally white) Western nations. I would say that my description is accurate.