division calculates a wrong value
3 ビュー (過去 30 日間)
古いコメントを表示
I have this Market class which adjusts the price of two cryptocurrencies. This method allows you to buy the first cryptocurrency by selling the second.
tokenBobtained = abs(obj.supplyB - (obj.k / obj.supplyA));
disp(tokenBobtained) % print 182
obj.supplyB = obj.k / obj.supplyA;
obj.priceB = (transactionVolume * obj.priceA) / tokenBobtained; % ERROR!
tokenBobtained in the example is 182, but in the last line the result of obj.priceB is not the one hoped for.
obj.priceB in the end of execution is 1 but it should be 0.55. The cool thing is that if I replace 182 with "tokenBobtained" in the last line I get 0.55, but in this way it doesn't work! What's the problem?
3 件のコメント
回答 (1 件)
Walter Roberson
2023 年 5 月 24 日
移動済み: Walter Roberson
2023 年 5 月 24 日
initialSupply (1,1) uint64 {mustBePositive} = 1
Operations on uint64 return uint64.
Division with integer datatypes round before conversion to integer data type.
2 件のコメント
Steven Lord
2023 年 5 月 24 日
The k property of the Market class is uint64 and that gets used in the originally posted code.
You could convert those integer values to double before dividing with / or you could use the idivide function, which lets you control how the result is rounded. Though idivide does not allow you to perform the division between a double and a 64-bit integer so unless you need to allow values of k outside the range of a 32-bit integer I'd store that property as a uint32.
参考
カテゴリ
Help Center および File Exchange で Fuzzy Inference System Modeling についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!