Можем ли мы остановить эту ерунду?
+ если (PARAMS [0] .get_real ()! = 0.0)
+ nAmount = AmountFromValue (PARAMS [0]); // отклоняет 0.0 количество
если (strMethod == "sendtoaddress" && N > 1) ConvertTo<двойной>(PARAMS [1]);
+ если (strMethod == "settxfee" && N > 0) ConvertTo<двойной>(PARAMS [0]);
Пожалуйста, научитесь использовать арифметики с фиксированной точкой, люди ... это не животное проекта больше, это финансовое приложение, которое в данный момент занимает USD $ 181 миллионов долларов сбережений населения.
Я думаю, что вы, возможно, потребуется урок на точечных работ как плавающие.
Короче говоря, результаты округления, расчетов и сравнений могут варьироваться в зависимости от компилятора, оптимизации или архитектуры, используемой.
Кроме того, существует и другая неочевидная семантика, такие как отрицательные нули, бесконечности, NaNs и т.д.
Я знаю, что в этом случае сравнение с 0.0, вероятно, не является проблемой, но, например, вы не хотите, чтобы кто-то отправить сделку по 0.12345678 Bitcoins, а затем из-за округления конверсий вы на самом деле отправить 0.12345679 биткойны вместо этого. Или кто-то, чтобы установить плату за транзакцию 0,2 и вместо этого он получает значение 0.19999999.
Это не приемлемо для финансовых приложений, чтобы использовать число с плавающей запятой представляют собой денежные значения.
Правительства имеют строгие правила против этого для банков, по очевидным причинам.
Пожалуйста, пожалуйста, избегать использования арифметики с плавающей точкой и воспитывать себя, почему вы должны сделать это.
Например, есть причина, почему Satoshi избежать вычислений с плавающей точкой во многих местах (например, расчеты трудности ... вы действительно не хотите, разные машины, имеющие другую концепцию, что трудность).
То, что вы действительно хотите, чтобы преобразовать строки непосредственно в число с фиксированной точкой (возможно, с BigDecimals если uint64 не достаточно для 21000000 * 10 ^ 8 отдельных единиц) и наоборот.
Всегда делать расчеты, сравнение и проверку диапазона с фиксированной точкой арифметики.
http://objectopia.com/2009/07/03/stop-using-floating-poin/
http://programmers.stackexchange.com/questions/62948/what-can-be-done-to-programming-languages-to-avoid-floating-point-pitfalls
http://www.theregister.co.uk/2006/08/12/floating_point_approximation/
http://hal.archives-ouvertes.fr/docs/00/28/14/29/PDF/floating-point-article.pdf
... и так далее, и далее ...
Тот же совет относится и к коду любого веб-сайта, который имеет дело с Bitcoins (MtGox и майнинг приходят на ум ...).