Bitcoin Forum
March 29, 2024, 12:17:10 PM *
News: Latest Bitcoin Core release: 26.0 [Torrent]
 
   Home   Help Search Login Register More  
Pages: « 1 [2] 3 »  All
  Print  
Author Topic: mtgox, please fix your rounding bugs  (Read 6068 times)
bitcoinex
Sr. Member
****
Offline Offline

Activity: 350
Merit: 252


probiwon.com


View Profile WWW
November 20, 2010, 05:32:27 PM
 #21

Financial programming lesson one: never use floats for money!

If there is no built-in fixed-point decimal type in your language it's best to use large integers.... or indeed, strings, although that makes computation somewhat harder.


A bit more complicated in the exchange software because it uses non-integer multipliers.
It is important that the sum of inflows and outflows accurately matched. But the relation between them can be a tad bit inaccurate.

New bitcoin lottery: probiwon.com
- Moжeт, ты eщё и в Heвидимyю Pyкy Pынкa вepyeшь? - Зaчeм жe вepoвaть в тo, чтo мoжнo нaблюдaть нeпocpeдcтвeннo?
1711714630
Hero Member
*
Offline Offline

Posts: 1711714630

View Profile Personal Message (Offline)

Ignore
1711714630
Reply with quote  #2

1711714630
Report to moderator
1711714630
Hero Member
*
Offline Offline

Posts: 1711714630

View Profile Personal Message (Offline)

Ignore
1711714630
Reply with quote  #2

1711714630
Report to moderator
"Governments are good at cutting off the heads of a centrally controlled networks like Napster, but pure P2P networks like Gnutella and Tor seem to be holding their own." -- Satoshi
Advertised sites are not endorsed by the Bitcoin Forum. They may be unsafe, untrustworthy, or illegal in your jurisdiction.
1711714630
Hero Member
*
Offline Offline

Posts: 1711714630

View Profile Personal Message (Offline)

Ignore
1711714630
Reply with quote  #2

1711714630
Report to moderator
ShadowOfHarbringer
Legendary
*
Offline Offline

Activity: 1470
Merit: 1005


Bringing Legendary Har® to you since 1952


View Profile
November 20, 2010, 06:11:20 PM
 #22

or indeed, strings, although that makes computation somewhat harder.

...not in PHP.

wumpus
Hero Member
*****
Offline Offline

Activity: 812
Merit: 1022

No Maps for These Territories


View Profile
November 20, 2010, 08:20:52 PM
 #23

Financial programming lesson one: never use floats for money!

If there is no built-in fixed-point decimal type in your language it's best to use large integers.... or indeed, strings, although that makes computation somewhat harder.


A bit more complicated in the exchange software because it uses non-integer multipliers.
It is important that the sum of inflows and outflows accurately matched. But the relation between them can be a tad bit inaccurate.
Fixed-point arithmetic with non-integer multipliers ain't rocket science either. Before the times of GPUs and fast floating point units, we used to do that a lot in games.
But in this case it is probably best to use a reliable and well-tested library, instead of reinventing another wheel. Isn't there some open source project implementing a Decimal() type for PHP?

Bitcoin Core developer [PGP] Warning: For most, coin loss is a larger risk than coin theft. A disk can die any time. Regularly back up your wallet through FileBackup Wallet to an external storage or the (encrypted!) cloud. Use a separate offline wallet for storing larger amounts.
bitcoinex
Sr. Member
****
Offline Offline

Activity: 350
Merit: 252


probiwon.com


View Profile WWW
November 20, 2010, 08:59:29 PM
 #24

Financial programming lesson one: never use floats for money!

If there is no built-in fixed-point decimal type in your language it's best to use large integers.... or indeed, strings, although that makes computation somewhat harder.


A bit more complicated in the exchange software because it uses non-integer multipliers.
It is important that the sum of inflows and outflows accurately matched. But the relation between them can be a tad bit inaccurate.
Fixed-point arithmetic with non-integer multipliers ain't rocket science either. Before the times of GPUs and fast floating point units, we used to do that a lot in games.
But in this case it is probably best to use a reliable and well-tested library, instead of reinventing another wheel. Isn't there some open source project implementing a Decimal() type for PHP?

Each SQL database engine contains a types what you mean. For example, btcex.com provides 1000 digits of precision for you!

btcex.com btcex.com btcex.com btcex.com btcex.com

New bitcoin lottery: probiwon.com
- Moжeт, ты eщё и в Heвидимyю Pyкy Pынкa вepyeшь? - Зaчeм жe вepoвaть в тo, чтo мoжнo нaблюдaть нeпocpeдcтвeннo?
nanotube
Hero Member
*****
Offline Offline

Activity: 482
Merit: 501


View Profile WWW
November 20, 2010, 11:25:30 PM
 #25

+1 on showing actual balances without rounding.

are you ready to see the numbers like this:

12.3234453404553525454656

?

Why, yes, yes i am. Bring them on, please. As long as they accurately represent the balance in my account, it's all good.

Though note that it should never get to so many decimal places, since there's a limit to how many decimal places bid/ask offer inputs can take. But even if it does - I'd rather see the real amount than a rounded one.

Join #bitcoin-market on freenode for real-time market updates.
Join #bitcoin-otc - an over-the-counter trading market. http://bitcoin-otc.com
OTC web of trust: http://bitcoin-otc.com/trust.php
My trust rating: http://bitcoin-otc.com/viewratingdetail.php?nick=nanotube
bitcoinex
Sr. Member
****
Offline Offline

Activity: 350
Merit: 252


probiwon.com


View Profile WWW
November 21, 2010, 12:33:34 AM
 #26

+1 on showing actual balances without rounding.

are you ready to see the numbers like this:

12.3234453404553525454656

?

Why, yes, yes i am. Bring them on, please. As long as they accurately represent the balance in my account, it's all good.

Though note that it should never get to so many decimal places, since there's a limit to how many decimal places bid/ask offer inputs can take. But even if it does - I'd rather see the real amount than a rounded one.

Even the price and volume of this small accuracy generates such large precision numbers when you using "limit" orders type.

Do not want to seem intrusive, but we have no such restriction. More precisely, now you can write approx 15 characters of price.

New bitcoin lottery: probiwon.com
- Moжeт, ты eщё и в Heвидимyю Pyкy Pынкa вepyeшь? - Зaчeм жe вepoвaть в тo, чтo мoжнo нaблюдaть нeпocpeдcтвeннo?
nanotube
Hero Member
*****
Offline Offline

Activity: 482
Merit: 501


View Profile WWW
November 21, 2010, 06:13:56 AM
 #27

Even the price and volume of this small accuracy generates such large precision numbers when you using "limit" orders type.
Still, as i said, no problem for me. It doesn't cost my eyes anything to see extra digits.

Do not want to seem intrusive, but we have no such restriction. More precisely, now you can write approx 15 characters of price.

checked out your exchange site... a few comments for you, which i hope may be helpful. more competition in exchanges is always good. Smiley

1. it seems that there are no outstanding asks on the site? you need to get some market makers in there, at least until you have a bigger population of traders.

2. your fees seem to be rather large... 6% one way, 50rub the other way? if you want to compete with established exchanges like bcm and mtgox, you have to offer competitive fees. or possibly even start with zero fees, to attract clientele

3. don't know how possible it is... but if you allowed USD exchange on your site as well as RUB, you'd have more interested clientele.

3.1. To that end, you need to finish your translation to EN, there's a bunch of russian in places even if EN is selected. The 'rules' page is in fact completely in russian.

Well, that's it for now. hope that helps. Smiley

Join #bitcoin-market on freenode for real-time market updates.
Join #bitcoin-otc - an over-the-counter trading market. http://bitcoin-otc.com
OTC web of trust: http://bitcoin-otc.com/trust.php
My trust rating: http://bitcoin-otc.com/viewratingdetail.php?nick=nanotube
davout (OP)
Legendary
*
Offline Offline

Activity: 1372
Merit: 1007


1davout


View Profile WWW
November 21, 2010, 08:28:49 AM
 #28

Also *never* use float column sql data types, when storing money values decimal is the way to go.

Precisely, i believe that in PHP it may be best to store floats as pure strings, and convert them when necessary. There were some nasty bugs in float-to-float comparisons in PHP, i don't remember if they fixed them all.

You have it wrong, floats are not supposed to be used to store exact values, decimal types are designed for that purpose


No, you have it wrong, because You are talking about databases, not PHP. PHP does not have something like "decimal types" as far as i know.

But PHP has the strings, which can store almost anything with any precision you need.

Yes, of course I'm talking about databases, as stated earlier I don't do PHP (anymore).
Suggesting to use strings says a lot about your coding skills/experience.

Extra question for mtgox : correct me if i'm wrong but i don't think LR allows more than two decimal places when expressing LRUSD amounts, so, what's the point of storing more decimal places for LRUSD balance ? Rounding should be done at trade time, not display time, so no-one ends up with unusable dollar crumbs.

Also, an easy solution for the which precision should be used for displaying i see two easy answers :
 - "You don't have that much USD" error message changed into "You don't have that much USD, your balance is XX.XXXXX"
 - Display full precision when amount is hovered by the mouse, pretty easy with title attribute


wumpus
Hero Member
*****
Offline Offline

Activity: 812
Merit: 1022

No Maps for These Territories


View Profile
November 21, 2010, 10:42:43 AM
 #29

Each SQL database engine contains a types what you mean. For example, btcex.com provides 1000 digits of precision for you!

btcex.com btcex.com btcex.com btcex.com btcex.com
We are not talking about SQL engines here, I know every SQL since 92 has had a built-in decimal type with configurable precision. I also know that many other languages (Java, Python,...) have Decimal support in the standard library.

The problem is that PHP has no built-in support for computing with these, so my question was if PHP has a (open source) library to do this. Because converting money amounts to floating point is a very dangerous idea. Mtgox is written in PHP so we have to do with PHP, the fact that you don't do PHP anymore is not important.

Bitcoin Core developer [PGP] Warning: For most, coin loss is a larger risk than coin theft. A disk can die any time. Regularly back up your wallet through FileBackup Wallet to an external storage or the (encrypted!) cloud. Use a separate offline wallet for storing larger amounts.
bitcoinex
Sr. Member
****
Offline Offline

Activity: 350
Merit: 252


probiwon.com


View Profile WWW
November 21, 2010, 11:40:58 AM
 #30

Each SQL database engine contains a types what you mean. For example, btcex.com provides 1000 digits of precision for you!

btcex.com btcex.com btcex.com btcex.com btcex.com
We are not talking about SQL engines here,

Very vain

Quote
I know every SQL since 92 has had a built-in decimal type with configurable precision. I also know that many other languages (Java, Python,...) have Decimal support in the standard library.

The problem is that PHP has no built-in support for computing with these, so my question was if PHP has a (open source) library to do this. Because converting money amounts to floating point is a very dangerous idea. Mtgox is written in PHP so we have to do with PHP, the fact that you don't do PHP anymore is not important.

btcex.com also written on the PHP and it does not prevent him from working as it should in the matter of rounding and precision.

Trying to do the main computations in PHP-frontend is a bad design.

New bitcoin lottery: probiwon.com
- Moжeт, ты eщё и в Heвидимyю Pyкy Pынкa вepyeшь? - Зaчeм жe вepoвaть в тo, чтo мoжнo нaблюдaть нeпocpeдcтвeннo?
wumpus
Hero Member
*****
Offline Offline

Activity: 812
Merit: 1022

No Maps for These Territories


View Profile
November 21, 2010, 11:53:56 AM
 #31

Well, doing all computations in the SQL engine isn't very good design either. Especially not those that are only used for showing numbers in the UI. It means a lot of unnecessary round-trips to your database server...
Of course, for updates to the accounts it's a different story.

Bitcoin Core developer [PGP] Warning: For most, coin loss is a larger risk than coin theft. A disk can die any time. Regularly back up your wallet through FileBackup Wallet to an external storage or the (encrypted!) cloud. Use a separate offline wallet for storing larger amounts.
bitcoinex
Sr. Member
****
Offline Offline

Activity: 350
Merit: 252


probiwon.com


View Profile WWW
November 21, 2010, 11:55:17 AM
Last edit: November 21, 2010, 12:35:37 PM by bitcoinex
 #32

Even the price and volume of this small accuracy generates such large precision numbers when you using "limit" orders type.
Still, as i said, no problem for me. It doesn't cost my eyes anything to see extra digits.

Imagine that all the numbers associated with money, will look this way?
12.3234453404553525454656

(While this number did not give an absolute accuracy!)

Quote
Do not want to seem intrusive, but we have no such restriction. More precisely, now you can write approx 15 characters of price.

checked out your exchange site... a few comments for you, which i hope may be helpful. more competition in exchanges is always good. Smiley

1. it seems that there are no outstanding asks on the site? you need to get some market makers in there, at least until you have a bigger population of traders.

This chicken and egg problem in some way. I'm not interested in the trading, I was more interested in the technical implementation. Maybe someone will be a marketmaker?

Quote
2. your fees seem to be rather large... 6% one way, 50rub the other way? if you want to compete with established exchanges like bcm and mtgox, you have to offer competitive fees. or possibly even start with zero fees, to attract clientele

This is only for RUB, and this is because of taxes.

WM* deposits is free and withdraw only 3%.
(Forgot to write, thank you for info.)

Quote
3. don't know how possible it is... but if you allowed USD exchange on your site as well as RUB, you'd have more interested clientele.

In this topic I am looking for people who agree to maintain accounts for other currencies:
https://www.bitcoin.org/smf/index.php?topic=1485.0

Now we are preparing for the EUR and JPY.

Quote
3.1. To that end, you need to finish your translation to EN, there's a bunch of russian in places even if EN is selected. The 'rules' page is in fact completely in russian.

Ok

Quote
Well, that's it for now. hope that helps. Smiley

Thanks for comments!

New bitcoin lottery: probiwon.com
- Moжeт, ты eщё и в Heвидимyю Pyкy Pынкa вepyeшь? - Зaчeм жe вepoвaть в тo, чтo мoжнo нaблюдaть нeпocpeдcтвeннo?
bitcoinex
Sr. Member
****
Offline Offline

Activity: 350
Merit: 252


probiwon.com


View Profile WWW
November 21, 2010, 11:58:17 AM
 #33

Well, doing all computations in the SQL engine isn't very good design either. Especially not those that are only used for showing numbers in the UI. It means a lot of unnecessary round-trips to your database server...
Of course, for updates to the accounts it's a different story.


Huh

Each page of any complexity is shown by one call to the database

New bitcoin lottery: probiwon.com
- Moжeт, ты eщё и в Heвидимyю Pyкy Pынкa вepyeшь? - Зaчeм жe вepoвaть в тo, чтo мoжнo нaблюдaть нeпocpeдcтвeннo?
wumpus
Hero Member
*****
Offline Offline

Activity: 812
Merit: 1022

No Maps for These Territories


View Profile
November 21, 2010, 12:01:38 PM
 #34

Ehh yeah sure, if you store everything in one big table...

Bitcoin Core developer [PGP] Warning: For most, coin loss is a larger risk than coin theft. A disk can die any time. Regularly back up your wallet through FileBackup Wallet to an external storage or the (encrypted!) cloud. Use a separate offline wallet for storing larger amounts.
bitcoinex
Sr. Member
****
Offline Offline

Activity: 350
Merit: 252


probiwon.com


View Profile WWW
November 21, 2010, 12:04:49 PM
 #35

Ehh yeah sure, if you store everything in one big table...




 Wink

New bitcoin lottery: probiwon.com
- Moжeт, ты eщё и в Heвидимyю Pyкy Pынкa вepyeшь? - Зaчeм жe вepoвaть в тo, чтo мoжнo нaблюдaть нeпocpeдcтвeннo?
davout (OP)
Legendary
*
Offline Offline

Activity: 1372
Merit: 1007


1davout


View Profile WWW
November 21, 2010, 01:14:32 PM
 #36

Each page of any complexity is shown by one call to the database
Yea right Wink

ShadowOfHarbringer
Legendary
*
Offline Offline

Activity: 1470
Merit: 1005


Bringing Legendary Har® to you since 1952


View Profile
November 21, 2010, 02:28:39 PM
 #37

The problem is that PHP has no built-in support for computing with these

Actually, i think that BC_MATH extension is compiled-in PHP in most Linux distributions. If I am wrong, then You will probably have to compile a version with that yourself.
I don't remember ever selecting "bc_math" extension in ubuntu/debian when installing PHP anyway, sho it should be built-in. I cannot confirm this for sure, because I'm not running debian/ubuntu now. Can somebody else confirm this ?

   * bcadd — Add two arbitrary precision numbers
    * bccomp — Compare two arbitrary precision numbers
    * bcdiv — Divide two arbitrary precision numbers
    * bcmod — Get modulus of an arbitrary precision number
    * bcmul — Multiply two arbitrary precision number
    * bcpow — Raise an arbitrary precision number to another
    * bcpowmod — Raise an arbitrary precision number to another, reduced by a specified modulus
    * bcscale — Set default scale parameter for all bc math functions
    * bcsqrt — Get the square root of an arbitrary precision number
    * bcsub — Subtract one arbitrary precision number from another

ribuck
Donator
Hero Member
*
Offline Offline

Activity: 826
Merit: 1039


View Profile
November 21, 2010, 03:18:33 PM
 #38

Actually, i think that BC_MATH extension is compiled-in PHP in most Linux distributions.

BC_MATH is widely available, and if it isn't in your distro (or at your ISP) then it's likely that GMP is available. Either of these libraries is suitable for arbitrary precision decimal arithmetic without glitches.
ShadowOfHarbringer
Legendary
*
Offline Offline

Activity: 1470
Merit: 1005


Bringing Legendary Har® to you since 1952


View Profile
November 21, 2010, 08:06:11 PM
 #39

Actually, i think that BC_MATH extension is compiled-in PHP in most Linux distributions.

BC_MATH is widely available, and if it isn't in your distro (or at your ISP) then it's likely that GMP is available. Either of these libraries is suitable for arbitrary precision decimal arithmetic without glitches.

WOW, it's even better than i though.

PHP has actually **TWO** different libraries just for doing arbitrary precision arithmetics ! This is awesome. PHP FTW.

ribuck
Donator
Hero Member
*
Offline Offline

Activity: 826
Merit: 1039


View Profile
November 21, 2010, 08:32:02 PM
 #40

WOW ... PHP has actually **TWO** different libraries just for doing arbitrary precision arithmetics ! This is awesome. PHP FTW.

I'll let you into a secret.

I only mentioned two of them. But PHP actually has **ELEVEN**! Ruby only goes up to ten.
Pages: « 1 [2] 3 »  All
  Print  
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!