正如馬克·蘭塞姆說 - 你必須做長除法。
對於n小數使用:
inline char* function_name(const size_t digits, const int numerator, const int denominator)
{
char *retVal(new char[digits]);
int reminder(numerator%denominator);
for(size_t i(digits); i>0; --i)
{
reminder *= 10;
*retVal = '0' + reminder/denominator;
++retVal;
reminder %= denominator;
}
return (retVal-digits);
}
對於第n個小數點使用:
inline char function_name2(const size_t digit, const int numerator, const int denominator)
{
int reminder(numerator%denominator);
for(size_t i(digit); i>1; --i)
reminder = (reminder*10)%denominator;
return ('0' + (reminder*10/denominator));
}
(很抱歉,但我不擅長命名功能)
要使用它們只是做了以下:
char *digits(function_name(31, x, y));
char digit(function_name2(31, x, y));
希望它會幫助。希望它不需要解釋(並且不要忘記刪除[]數組)
您正在使用的浮點運算不會接近100位數。您需要在整個過程中將所有內容保留爲整數。按照你在學校學到的方式進行長時間的分工。 –
你可以使用像[this]這樣的任意精度算術庫來實現,內置類型的精度要低得多。 –
@Bob__我無法找到關於如何安裝或使用Windows版GMP的教程。 – Larrimus