Hacker Newsnew | past | comments | ask | show | jobs | submit | AlotOfReading's commentslogin

Not really. The precolonial southwest was fairly densely populated, with some areas exceeding their modern density. Population density grew sparser for various reasons after the mid-14th century until Spanish colonialism created some dramatic demographic changes. The southwest remained a pretty lawless place on the frontiers of empires where armed conflict was commonplace for the next few hundred years, until after the turn of the 20th century. Would you want to move into a civil war even if it had AC?

AC was coincidentally invented as all of this was clearing up, but it wouldn't become ubiquitous until decades later after the major cities had been established with large populations. And even then, I'd blame cheap accessibility of long distance transportation more than AC for the modern state.


What parts of the pre-14th-century american southwest corresponding to modern Arizona were more densely populated than they are today? I'm a bit skeptical of that claim, given how much more human density is possible under conditions of technological modernity compared to anytime prior to the 14th century.

Bits of Mesa that are now extremely low density suburban development were at one point large Hohokam pueblos. It's not an entirely fair comparison because it's essentially comparing high density midrise apartments to some of the least dense suburban sprawl in the US, but it's not wrong.

At a more regional level, the area around Cortez, CO is less densely populated than it was simply because virtually no one lives there now. Kayenta, much of the Navajo nation, the upper Gila region, etc are similar.


I don't believe that 14th century Indian population counts have any reliability. Estimates of pre-Columbian populations in the US area vary from 10 million to 100 million.

You can scarcely throw a stone in Phoenix without hitting an old pueblo. I don't see why continent-wide demographics have any relevance.

Imagine you have two blackbody radiators with the same bulk properties, except one has surface area shenanigans like aerogels. In the far field as a whole, it seems like both should radiate essentially the same regardless of the internal details. You can shape emissive direction, or improve efficiency of non-ideal materials, but even ideal materials don't fix the issues pointed out by the parent.

Right; it's only area exposed to the exterior that counts. A physical object can't thermally radiate more power than a perfect blackbody spanning its convex hull.

(This follows because a physical object can't absorb more light than a perfect blackbody spanning its convex hull. A perfect blackbody by definition absorbs 100% of incident light, which is a hard upper bound. Any line incident on an object is also incident on its convex hull).

(Consider an isothermal object that emits more power than a blackbody in the shape of its hull at the same temperature. If you were to place that object in a closed system at thermal equilibrium, the interior of an insulated emissive sphere—combining assumptions, it would emit more power than it absorbs, in violation of the 2nd law. Starting from an isothermal system, the object would grow colder, and the enclosing container hotter).


There's perfectly legitimate ways to argue against the existence of natural rights (see Bentham), but this strawman ain't it.

At least someone’s done some research on the topic

My guess is that the crowd here needs to go and actually do a little bit more philosophical reading maybe start with deleuze


You’re being ridiculous if you’re down to the level of saying you don’t have a right to life because there’s no guarantee.

In that case there’s no rights to anything, you just don’t believe in them, and you can stop being coy about by only calling out individual instances people refer to as a right


Correct, the idea of “natural rights” left any serious philosophical defense in the 1970s. I mean bentham’s rotten head amd straw body is the the only body still in philosophy taking “natural rights”

Might as well be discussing luminiferous ether


Cool then don’t be coy about your beliefs on rights and just open up with that instead.

And ah I recognize your name now, I have always found your writings a tad off to put it mildly.


I’ve been debating on the internet under my real name for…30 years? It got boring 20 years ago now the fun part is figuring out what bait makes people make the argument, so I don’t have to.

The most effective way to get a correct answer on the Internet is to get people to disagree with you because they want to prove how smart they are

It’s also the one way left seemingly that people learn.

They’ll see something they disagree with run off to Google or Wikipedia or now one of the chat applications, do a bunch of research (in which case they learn a bunch of stuff) and then they come back and they “prove me wrong.”

If I actually get ppl to go out and learn something that’s a win. There’s probably somebody who read this thread who never heard of Jeremy Bentham and went and looked them up, that is an unambiguous success.

:)


> It got boring 20 years ago now the fun part is figuring out what bait makes people make the argument, so I don’t have to

I say this from a glass house. You are an asshole.


Ha, at least we’re self aware

You can do whatever you want to your car in the US as long as it remains roadworthy, which is basically compliance with FMVSS and state laws. Want to guess what rules don't have much to say about driver assistive technologies?

    Otherwise they would have the appropriate insurance, like any company that trades in any dangerous business.
What is "appropriate insurance"?

As far as I'm aware, virtually every state with an AV pilot program requires insurance (either commercial or self-insured, as typical for commercial vehicles) in order to be permitted. Several major markets (e.g. California) also require an additional bond to cover issues and have a gradual expansion process to better understand unknown risks.


Humans have a remarkable ability to be apparently cognizant and engaged with tasks, without actually using higher level awareness. One example of this is distracted driving while talking handsfree or lost in thought.

Driver monitoring is better than nothing, but it's not the same thing as an engaged driver.


I've yet to see any form of certification or paid code review I'd be willing to bet critical infrastructure on. And working in safety critical software, that's not for lack of trying. Good review is usually harder than building a working system and the asymmetry of offense and defense applies to anything you miss.

A neat trick many people aren't aware of is that you can treat binary floats as saturating fixed point, subject to some qualifications (generally the next larger float type can represent any given fixed). Float operations internally are "just" fixed point ops with some normalization steps and rounding bits on each side, so if we use a float type with enough mantissa bits to hold the fixed point value all we have to do is mask off the extra precision to get back to fixed point. This similarity to fixed point is exploited in some modern NPU hardware by storing only one exponent for an entire block of floats, with a wide fixed point unit doing the actual work, a.k.a block floating point.

This hack has some interesting advantages. Float to integer is still only a few cycles, the masking is one line of libm functions, you get better (and dynamically selectable!) precision, it has gradual underflow and overflow, you can write numeric code like usual, and normalization is automatic.


Usually, if you know enough about your algorithms to select an appropriate float alternative, you also know enough to fix your float code and that's what you should actually do.

That said, some of these aren't alternatives. Symbolic computation is a different thing entirely. Interval arithmetic can be built atop floats (e.g. IEEE-1788) and has its own zoo of unintuitive behaviors. BCD is better called a historical artifact than an alternative these days.

It's really just rationals and decimal floats in this list, which probably don't solve the issues you have if you're considering float alternatives.


> BCD is better called a historical artifact than an alternative these days.

It's currently in use all over the world. You can't do a card payment, either in-person or online, without an intermediary using ISO8583.


I think people with certain backgrounds look at stuff like x86 BCD opcodes being removed in the move from x86-32 to amd64 and think "must be because noone uses it". Other backgrounds know that ain't so.

You can't "fix" floating point code if you are looking for deterministic answers. You just have to use other data types to handle money or complex mathematical operations like 0.2+0.1, no ifs and buts.

Floats are deterministic, but I get what you mean. Let's discuss what's meant by the result of a complex calculation. 0.1+0.2, or sqrt(2), or whatever.

1. Do you want your result to exactly encode the answer without rounding error? No fixed precision type can provide this in general, so you're stuck with symbolic approaches. If you can bound things (usually difficult), maybe you can get away with non-symbolic approaches.

2. Do you want a sensible numeric answer? This is what floats (and many other systems) give you. The definition of "sensible" is inherently tricky here and there's not a definition universally appropriate to every possible computation.

So let's return to 0.1+0.2=0.3000...1 specifically. There's two common ways to think of an encoded float. One is as the directly encoded value, as you're doing. Another way is to think of it as an interval of real numbers between the next lowest and highest intervals. Under this latter interpretation, it makes sense to discuss shortest decimal string within the interval, 0.3 in this case. There's no ambiguity because each real lives in exactly one interval. This is what algorithms like dragon box do for float to decimal string conversion.

What decimal floats give you is an encoding that tracks significant digits, where every decimal string exactly corresponds to a midpoint of an interval of reals. They do this at the cost of space, speed, and complexity. You don't get an escape from the fundamental issues of fixed precision types like rounding error, numerical sensitivity, precision loss, etc. I don't think that tradeoff makes sense for most algorithms in most contexts.

The benefit of sticking with floats is that lots of smart people have spent countless hours trying to give non-experts a "good enough" path through the untamed wilds of numerical analysis, tooling to help them when they get lost, tribal knowledge to point out the edge cases, and it's almost universally supported in hardware. By all means you should go wandering off the trail, but fully understand what you're doing and why beforehand.


> Another way is to think of it as an interval of real numbers between the next lowest and highest intervals. Under this latter interpretation, it makes sense to discuss shortest decimal string within the interval, 0.3 in this case.

Note that the result of 0.1+0.2 does not lie in the interval containing 0.3, which is was confuses most people. The issue is that there is some imprecision in representing 0.1 and 0.2 too, and that compounds when summing, resulting in something that does not actually correspond to 0.3 (hence the classic 0.1+0.2!=0.3)


But, as I understand it, 1+2=3 in all of these senses using floating point; as long as you don’t go outside of a certain very large range, they are really a superset of integers.

That makes me think that I can just plan ahead by storing the number of cents instead of dollars, or a “hack”, and then it makes me wonder why the format even requires me to do that.


> That makes me think that I can just plan ahead by storing the number of cents instead of dollars

That's what is generally suggested when handling money, at least for normal businesses (in finance related businesses you might have to handle a lot more decimal places for things like exchange rates, fractions of cryptos etc etc)

Be careful though that some currencies require more than 2 decimal places.


> deterministic answers

> 0.2+0.1

0.2+0.1 with floating point numbers _is_ deterministic, as you'll always get the same answer.

I suspect you might instead mean exact calculations/answers (in the example above, neither 0.1, 0.2 nor 0.3 have exact representations using floating point numbers).

And just to be clear, there are non-determinism-like issues with floating point numbers, but those are much rarer/niche and _can_ be fixed. For example parallel summation depends on the order the summation was made, so non-determinism in the parallel implementation ripples through the summation result. Some non-basic operations (e.g. trigonometric operations) have platform dependent implementations with different roundings, so you might experience different result based on the platform you're on.


Floating point is deterministic, what are you talking about?

> You just have to use other data types to handle money or complex mathematical operations like 0.2+0.1

Such as... decimal floating point.


CPUs have many different configuration bits to configure floating point rounding, flushing denormals, etc. which mean that in practice anything that relies on floats being deterministic has the stability of a house of cards.

All of which are well defined and can be configured from user space. That doesn't make them non-deterministic.

> Floating point is deterministic, what are you talking about?

Order of operations can change a result, for example. I suspect you mean that the algorithm never changes. While op means that mathematical operations which most folks would expect to be reliable are not.


They're not associative, sure. But that's a very far cry from claiming they're non-deterministic.

There are enough problems for a 44 page paper titled "What Every Computer Scientist Should Know About Floating-Point Arithmetic"[1] I don't quibble on the language because I know what people mean.

Most folks won't encounter most of the issues, generally. But expose your code to a large enough dataset, or be like me and write a CAD/CAM system with motion control and experience most of them.

That's why I wrote hyperreal[2]

1: https://www.cs.tufts.edu/cs/40/docs/WhatEveryComputerScienti...

2: https://github.com/timschmidt/hyperreal


That (no doubt excellent, but) technical PDF is overselling the problem somewhat, when what every dev needs to know is better represented by a friendlier summary like https://floating-point-gui.de/

That's a great resource as well. Targeted at developers, rather than computer scientists. Same observations, different target audiences and expectations. You're probably right that the more practical reference targeted at developers is more useful here. My references are full of the academic papers because of my CAD work.

> Targeted at developers

Sorry, yes, I probably should have worded that in a way that made the distinction more obvious.


You don’t quibble about what words mean when the words you choose have very specific meanings in exactly the subject area you are talking about?

You make it really hard to take you seriously.


No. It's been quite some time since I realized that all language is a pidgin used to translate between individuals' unique lived experiences and points of reference. And find communication much more fluid and less confrontational when the focus is on shared meaning rather than perfect word choice. Especially when working with non-native speakers, but also just people in general. Stephen Fry captures the feeling: https://www.youtube.com/watch?v=Ovi7uQbtKas

When TZubiri made their original comment, I understood they were speaking about some or all of the issues outlined in the paper I linked. If you didn't, that's ok. If you think the referenced paper missed something, it's OK to add that.

> You make it really hard to take you seriously.

Same, bud.


These kinds of comments tend to happen when you are assuming a shared meaning that isn't so shared. Especially in this context, it's a good idea to be precise in your terminology when there is a commonly used vocabulary for talking about it. Especially when it comes to misconceptions about floating point, which is often treated as 'random' when it generally isn't.

Sometimes specificity matters. Usually when looking directly at some specific piece of code. In this conversation, the intended meaning was clear. Folks just love being the pedant and the brinksmanship which comes with it. There's a propensity to derail otherwise useful conversations into discussions like this rather than dig deeper into what people meant, and were trying to communicate.

> In this conversation, the intended meaning was clear

Apparently it wasn't, as the commenter who originally used the term has now clarified that they did indeed mean non-deterministic. You misunderstood them.

So maybe being specific about terminology here isn't just pointless pedantry?


Regardless of his choice of words, he's specified that he's speaking about IEEE754 and the sort of issues which arise systemically from the compromises inherent in it's design.

He can't attest to them being the same ones in the paper I linked, but I can. Everything he's said is in line with the situation detailed within.

He and I seem to understand each other. I get what he's saying. How the issues with IEEE754 give rise to the nondeterminism he's talking about. I should, I wrote a whole system of libraries to deal with them. Do you understand the conversation? Because it seems like you think we're talking about two unrelated things and you're still arguing over terminology.


Thanks for following the thread. I'll clarify on my intended meaning was indeed a strict actual definition of determinism, but a broader definition of floating point, to include its actual usage. But fwiw, it was indeed possible that I was someone who confuses determinism for precision, but no.

When I said that floating points are not deterministic, I wasn't very precise, but I do think that broadly speaking, floating point arithmetic, as used today, foregoes determinism, and this results from the very ethos of the foundational IEEE754 data type, the goal is to have a data type for approximate answers, turns out that when exact answers are sacrificed in the name of speed, so is determinism. And this has huge effects on modern day, Floating Point is used on separate hardware with parallel operations, and there's race conditions that make most Machine Learning and AI computing irreproducible, and that indeed seems to be a consequence, as you mention, of the lack of associativity of FP.

So, that said, I would make two clarifications:

>-- Floating Points

>++ Floating Point computing

where by Floating Point computing would mean the actual application computing that we build, as opposed to "Floating points" referring to the ideal ancient standardized hardware layer abstractions.

And if necessary:

> -- is

> ++ tends to be

In order to be perfectly correct, which after all, is what we are going after.

So if pressed, I wouldn't say "Floating points are not deterministic" but "Floating Point computing tends to be non-deterministic", but I would feel very comfortable shorthanding it to "Floating Points are non-deterministic" anyways.

The paper cited is a bit hard for me, so I can't verify if it matches what I'm saying. But I imagine by the date, it wouldn't be able to address the issues that we can empirically from the advent of ML systems, but maybe it did foresee from a theoretical standpoint some of their limitations.

There's a between-the-lines thesis here that there's two main schools of computing nowadays, one that seeks perfection, and another that seeks approximations, the CPU/GPU dichotomy is roughly analogous to the Mathematics/Physics vs Engineering/Industrial dichotomy.rroot@t14:/mnt/c/Users/TomZubiri/Desktop# cat fixed.txt Thanks for following the thread. I'll clarify on my intended meaning was indeed a strict actual definition of determinism, but a broader definition of floating point, to include its actual usage. But fwiw, it was indeed possible that I was someone who confuses determinism for precision, but no.

When I said that floating points are not deterministic, I wasn't very precise, but I do think that broadly speaking, floating point arithmetic, as used today, foregoes determinism, and this results from the very ethos of the foundational IEEE754 data type, the goal is to have a data type for approximate answers, turns out that when exact answers are sacrificed in the name of speed, so is determinism. And this has huge effects on modern day, Floating Point is used on separate hardware with parallel operations, and there's race conditions that make most Machine Learning and AI computing irreproducible, and that indeed seems to be a consequence, as you mention, of the lack of associativity of FP.

So, that said, I would make two clarifications:

>-- Floating Points

>++ Floating Point computing

where by Floating Point computing would mean the actual application computing that we build, as opposed to "Floating points" referring to the ideal ancient standardized hardware layer abstractions.

And if necessary:

> -- is

> ++ tends to be

In order to be perfectly correct, which after all, is what we are going after.

So if pressed, I wouldn't say "Floating points are not deterministic" but "Floating Point computing tends to be non-deterministic", but I would feel very comfortable shorthanding it to "Floating Points are non-deterministic" anyways.

The paper cited is a bit hard for me, so I can't verify if it matches what I'm saying. But I imagine by the date, it wouldn't be able to address the issues that we can empirically from the advent of ML systems, but maybe it did foresee from a theoretical standpoint some of their limitations.

There's a between-the-lines thesis here that there's two main schools of computing nowadays, one that seeks perfection, and another that seeks approximations, the CPU/GPU dichotomy is roughly analogous to the Mathematics/Physics vs Engineering/Industrial dichotomy.


> when exact answers are sacrificed in the name of speed

I have found in https://github.com/timschmidt/hyperreal and the geometry layers built atop it, that exactness and speed are not fundamentally opposed. Hyperreal retains exact mathematical structure at the scalar level, and at each level higher up through vertices, vectors, matrices, triangles, curves, etc. And uses it to choose optimal datatypes, dispatch against the fastest algorithms, and eliminate large chunks of needless calculation where simpler proofs are sufficient.

The downside is a bit of additional code and API complexity. But the slightly more complex API accurately represents issues like uncertainty in decidable equality of arbitrary computables in bounded time, which is a limitation of math itself, so representing it accurately in the API permits the algorithms to be more robust.

> Floating Point is used on separate hardware with parallel operations, and there's race conditions that make most Machine Learning and AI computing irreproducible

Deterministic reproducibility is, I think, one of the most awesome superpowers of a system like hyperreal. It makes simulation much more interesting and useful. As well as cross-platform use.


    floating point arithmetic, as used today, foregoes determinism, and this results from the very ethos of the foundational IEEE754 data type
This was somewhat true in the past, but the situation has been improving dramatically in recent years to the point where FP determinism is completely feasible. The remaining hurdles are primarily on the toolchains/kernel side. I have a library called rfloat that you can drop into most C/C++ code for practical determinism without thought (subject to documented caveats), for example. You can do the same thing manually with some more careful attention.

I'm in a very remote corner of the world on bad Wi-Fi though, so you'll have to forgive omitted links.


>in recent years to the point where FP determinism is completely feasible.

Ok, sure, it is feasible, but is that how it's actually used? Or is it used in GPUs with thousands of processors running in parallel, and batching different operations, (and with temperature settings that add even more pseudo-indeterminism purposefully).

It's funny that the customs actually go in the opposite direction of fabricating even more indeterminism, whether it is for being an accountability sink, or for fudging data to claim IP over the new mungled data, the FP/GPU/ML folk want magic, not determinism.


This is a thinly disguised broken window parable.

If everyone goes around mowing lawns for each other, the economy is richer in lawn mowing at the expense of all the other things that would have been funded had everyone mowed their own lawns and purchased different services instead.


I am confused with this, if "everyone mowed their own lawns" then the net result will be exactly the same, everyone will be busy the same and not poorer, just without money movement.

look at the broken window parable as he mentioned it might help understand the rest of his comment

This is not the same. If everyone wants mowed lawns, and everyone is busy working on that, there is no opportunity cost, everyone is working on their top priorities. The broken window fallacy is a fallacy because the headline gdp figure doesn't account for the destruction of the window which cancels out the benefit. In the grass mowing analogy nothing has been destroyed, useful and priority work has been done all around.

Broken window is different from the mowing lawns hypothetical

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: