What is your favorite name for a SafeCoin analogy to BTC’s Satoshi? (reboot) divs = irvines, troons, and ayrs?

Using decimal, like I proposed, then you can give 0.25 and 4 x 0.25 is 1 coin

if people gave 0.249999999 then with decimal then it shows exactly since rounding is not needed.
and 4 times that would show that it is nearly 1 safecoin but not actually, but due to rounding with binary it shows as 1.0 safecoin.


But my point was your rounding required by binary

The APP says the price is 1/4 safecoin, so then the APP requests the closest to the amount. And in retrospect 1/4 is not best example. Better to have chosen an amount that is not exact in binary form

So the APP requests the closest amount but falls short of 1 safecoin when all the parts are added up, yet in decimal it does. But because of rounding it doesn’t show.

Using 64 (or 96 or 128) fixed point for the decimal then the exact amounts can be sent and the figure is accurate to 17 decimal places (or whatever due to 96 or 128 bit). And amount of 35 pico safecoins is represented exactly as 3500000

If you are using a balance system then I still disagree that using 3 separate integers for the decimal is sensible or desirable. Just use one integer of the size you want.

And as in my proposal if you want to limit the resolution early on so people cannot send trillions and trillions of 10^-17 safecoins (1 div) spamming the system while the network is young then its easy to implement a limit to the decimal places that the network will accept for transactions. Then as the network grows the net s/w update can increase that limit by a few places. So maybe release with 2 places then after it proves itself the next update could have 4 or 6 places. Obviously the actual figure is always 17 decimal places so its a config thing for the net s/w and app s/w

My critique of 3 x uint32 is nsfw.

  • Its unnecessary
  • Its unneeded complexity for no shown benefit
  • It introduces (v.small) inaccuracies for 99% of the people using a decimal based numbering system. There is a reason that we are still teaching and using decimal for our numbering system and not converting to base 2 in this computer age.
  • More complex for network code and for APP code (without any shown benefit) and the associated test time and bug potential
  • naming scheme is only needed if this idea is used.

Benefits

  • keeps people guessing
  • sounds intricate and complex. (Trying to sound like a really smart thing only a brainy person could think of)
  • Sounds cool and rolls of the tongue a bit
1 Like

Please treat this as all in good fun.

1/4 S = 1073741824 irv (exactly) since you picked a divisor of 2.

Wrong. You’re doing floating point rounding. This isn’t necessary. I’ve showed the math on this already multiple times in this thread.

Wrong. The “aka binary” representation will always have more precision than the “aka decimal” balance system, and therefore is always equal to the same precision, as I previously showed.

Do you have a processor that can deal with a uint96 or a uint128? Any quantity of safecoin, from 0 to the total population is nicely represented by a uint32[4]. Fixed point fractional arithmetic (add, subtract) with a doublet, triplet, or quadruplet of uint32’s are easy. Just as easy as uint64, more so if you don’t have a 64bit processor. It’s not complicated, just a little extra of the easy stuff. No need for fancy processor intrinsics or special libraries etc.

This is even easier for a “divide by two” aka “binary” balance method, and scales easier as the network grows, rather than making things more complex later by capping the max_range to the largest divisible by 10 now. Doesn’t the balance system offer constant complexity transactions? That was its biggest selling point right? So there is no spam in either case. 1 trillion divs or 1 div, whether that be in troon or in ayr, the same computation cost for the transaction. This is no different between the two systems.

Now this is complicated and unnecessary. The network PUT cost will naturally limit the minimum number of divs sent in a single transaction. You and polpolrene’s balance system works just as well at reduced precision (aka decimal) or full precision (aka binary). I think it works better via “aka binary”.

Can you give me 96bit resolution with a single uint64? No need for you to get into the whole 96 bits is unnecessary and crazy etc. Pretend for a moment that at some hypothetical situation in the next 40 years, SAFE gets a key benefit by have all those bits available a few hours due to some unforeseen limit case. Pretend for a moment that ayrs are rather useful for paying for forum likes or a straightforward way of cheaply performing a nice function like thankscoin, or to account for any number of things. Basic SafeCompute??? … just use the network to do basic arithmetic options using troons or ayrs… and so on.

It’s not complex. Same UI to all users. I listed all the benefits in that list I asked you to critique.

It’s easy. I already showed you the 10 lines of code on how to do it in the quasi-divisibility thread.

Either way they are all divs :wink:

No one would even see it unless they wanted to. Default wallet representation shows a floating point decimal number. Click the “advanced options” tab, and then you can send me a few ayrs for all my hot air. :grinning:

It’s not complex, it is just simple++. It follows the same underlying framework as all modern computer architectures. Instead of sending a fractional Safecoin with Mega-divs send me a Mebi-div. No one likes working with long decimals anyhow. You just pick the denomination that is easiest to work with as the fiat value goes up down. Now : “That piece of digital art will be 10 S please.” Ten years later, “That piece of holographic art will be 10 irv please.” Ten years later, “That piece of cybernetic art will be 10 tro please”, … etc.

Yes, yes it does. The Scots have some of the best sounding words/names… at least to an American ear. Cheers :grin:

I said unneeded complexity. Not trying to quantify how complex. It is more much more complex than one fixed point 64 or 96 or 128 integer

Duh, the APP showing the person they sent 0.25 (and as i said and you pointed out 1/4 was a bad bad example but pick any other 2 decimal place amount that cannot be represented exactly in binary and you get the point)

Its really basic Computer Science degree level stuff. CS101


what is 35 pico safecoin in your representation?

This is just going in circles. As I’ve already pointed out in this thread, I can cook up a number in the binary system that you can’t represent exactly in the ideal mathematical sense, and same for you to me. The difference is that the real world of physical substances can only be measured to a certain precision. No different than if “Safenium” was another element like Aluminium, Gold, Titanium or Selenium and MaidSafe has made coins out of it called Safecoins to a given precision. The “aka binary” balance method has enough precision to measure the same substance as accurately or better than “aka decimal”, but the reverse is not true. You will never be able to represent 3x2^-96 with your 96bits of storage.


The 35 pico safecoin transaction that the person is requesting from the network in your example is only accurate to 27 significant figures when using the “aka decimal” balance method and a uint32 x 3 for the 96 bits to store the representation. The “aka binary” balance method at 96 bits does do a little rounding but only at higher precision, in this case it completes the transaction exactly to the same 27 sig figs (actuall it does it exactly to 29 sig figs in this case).

(AKA Decimal Balance Method with <90bit resolution)
35 pico-Safecoin = 3.5E−11 S = 35000000 troons

(AKA Binary Balance Method with 96bit resolution)
35 pico-Safecoin = 3.5E−11 S = 645636042 troons + 2490369384 ayrs


That’s just because the complexity has been encapsulated and hidden from you by the compiler and other libraries etc. The same addition and subtraction would by easy to do for a four digit number where each digit has 2^32 cardinality, and all operations could be done with a simple function call.

If we turn the tables, I too could make things look more “complex” for the “by-ten” balance system.

  1. How would you use your method to send me 3x2^96 S ? It’s not numerically possible for you.

  2. Can you send me the equivalent of my 5 irvine “exactly” with your decimal system? Nope, not numerically possible for you.

If our computers used decimal math natively, then I would say go with decimal denominations, but nearly all do not. If they did we wouldn’t have a hard cap of 2^32 safecoin, instead we would have a hard-cap of 1E9 or something similar in magnitude. The choice of going with binary divisibility was already made a long time ago for the crowdsale. The “by two” aka binary balance method I described above holds true to form to that stipulation and merges seamlessly with MaidSafe’s original “by-two” divisibility using separate data objects. As network performance levels increase, a hybrid approach may be most optimal for the network. Five years from now, instead of having 2^32 whole safecoin MDs the network might work better with 2^35 1/8 Safecoin MDs, and the remainder of divisibility concerns are still easily handled via the binary balance method. I think this is a positive incremental improvement of the systems you and polpolrene proposed.

WHAT

Nope

The balance variable would be 3500000 base 10 0x3567E0 base 16 (using 64 bit integer and fixed point 0.00000000000000000 - 1.00000000000000000) I hope I got the right number of zeros in there but the point is still valid

So perfect accuracy

Yeah, I see how you’re looking at it, and from that perspective I understand why you might have objections. I’m looking at it more from the perspective of a chemist or physicist. Maybe that’s not the right way to look at it, but I think it may be. We’ll see. Going to Ayr in April? Maybe we can chat it over more at a good pub down-town.

2 Likes

The penny dropped did it? Its in the proposal I made.

Often we cannot see the solution for all the possibilities.

Of course it is the correct way, any accountant could tell you that.

Its simple maths. We are talking of money and simple accounting systems. (payment system) And we are not concerned with other things and once you focus on the fact that its a payment system then it comes clearer.


As to complexity, we need to keep it as simple as possible to do the job at hand. If we added 50% complexity to a number of parts of the system then the design begins to become divergent and never will be completed. While any one part seems OK to make complexer the problem is having that mindset and applying it to many parts.

My proposal tried to use components that would already be needed and set a standard that could be used by the network and Applications (eg wallet applications). Thus no extra MDs, just one field in the primary wallet datastructure MD and replicate the wallet for the network (or section) to hold frozen coins. Then the code is all reused and no extras.

By having the balance as one variable amount then simple A + B instruction is used to add two balance amount and one test if > 1.0 Its quick fast and unlikely to get the code wrong.