5
A
答えて
6
dc
manualは言う:
ほとんどの算術演算は、あなたが
k
コマンドで設定できる「精度値」、の影響を受けています。デフォルトの精度値は0です。
/
2つの値をポップし、最初の値からポップした2番目の値をポップし、結果をプッシュします。端数の桁数は、精度値で指定します。
だから、あなたはそれがデフォルトである、精度が0であることがわかっている場合0k1/
、または単に1/
を使用して(ゼロへの丸め)を切り捨てることができます。例:
$ dc -e '12.9 1/ p'
12
$ dc -e '_12.9 1/ p'
-12
その他の種類の丸めはより困難です。最も近い整数にラウンドするには、例えば、[_1*]sad.5r0>a+0k1/
を使用することができます。
$ dc -e '12.9 [_1*]sad.5r0>a+0k1/ p'
13
$ dc -e '_12.9 [_1*]sad.5r0>a+0k1/ p'
-13
簡単に説明:
[_1*]sa
店コマンド_1*
(-1で乗算)レジスタa
インチd
は、スタックの一番上の値(丸めたい値、v)を複製します。.5r
0.5を押圧した後、上位2つの値を交換するので、スタックは今V 0.5 Vあります。0>a
レジスタにコマンドを実行a
(Vが負である場合には、である) V > 0の場合。 V場合スタックは、Vが正であれば、今0.5 Vある、又は-0.5 V負です。+
は、上位2つの値を加算し、V Vが正の場合 + 0.5、又はVプッシュ - Vが負の場合0.5。0k1/
上記のようにトランケートします。
丸めする数値が負でないことがわかっている場合は、.5+0k1/
を使用することができます。また、精度が0であることが分かっている場合は、.5+1/
を使用できます。
を切り捨て、[dX[1-]sa0<a]sad0>a0k1/
を使用してください。
は、[dX[1+]sa0<a]sad0<a0k1/
を使用してください。
これらの提案はすべてレジスタa
を使用しているため、実際のプログラムで調整する必要があります。 [_1*]sa[d1r0>a+]sbd0k1/2%0!=b1/
:
1
ガレスの答えのビル、バンカーの丸め(最寄りさえ整数にすなわちラウンド)については、以下を使用します。
メモこれは追加のレジスタbを使用します。
ビット密です、それでは、それを打破してみましょう:
[_1*]sa #1- Assign a macro "$input *= -1" to register 'a'
[d1r0>a+]sb #2- Assign a macro "if($input<0){$input -= 1} else{$input += 1}"
# to register 'b'
d #3- Duplicate the input value; the duplicate will be used
# to decide if the input is odd or even.
0k #4- Set precision to 0; this makes the 1/ operation truncate
# all digits to the right of the decimal point.
1/ #5- Truncate those decimal places on our duplicate input.
2% #6- Modulo 2; if we get 0, it was even, otherwise it's odd.
# Note this consumes the duplicate from line #3.
0!=b #7- If it was odd, run the macro in register 'b'. This adds +/-1
# to the input, respectively if it's positive or negative.
1/ #8- Truncate decimal places; if the input was odd we're now
# at floor($input+1) for positive or floor($input-1)
# for negative; if it was even we're at floor($input).
関連する問題
- 1. ダブルダウンの丸め(前回の計算結果が<.5の場合でも)
- 2. ドロップダウンボックスを使用したローン計算機
- 3. 奇妙な計算結果
- 4. JavaScript計算機は常に床に丸めます
- 5. 計算機の結果をJavaで取得する
- 6. 別の計算の結果を含むOracleの計算
- 7. アンドロイドネイティブ計算機から結果データを取得するには
- 8. マルチプレイヤーゲームの弾丸計算
- 9. Excel 2003:計算結果の抽出
- 10. 反復計算の結果を収集するためのRDDの作成
- 11. 変数の1つを使用した演算結果null(空)
- 12. MySQL select LIMITを使用した結果の合計
- 13. Java計算機で間違った結果が表示される
- 14. 計算結果をオンザフライで表示対テーブルで事前計算結果を保存
- 15. StringTokenizerを使用したJavaコンソール計算機
- 16. financial.ppmtメソッドを使用したローン計算機
- 17. ORACLE - 2つの値を計算し、結果をビューに表示
- 18. java算術計算の結果のデータ型
- 19. PHPを使用したリモートイメージファイルサイズの計算
- 20. Numpyを使用したアフィニティマトリックスの計算
- 21. アトリビュートを使用したタブローの計算
- 22. 結果セットを使用して計算値で選択したテーブルと同じテーブルを更新します
- 23. 計算されたデータ列を使用してページングされたソート結果を取得するストアドプロシージャ
- 24. Java:メモリ使用量を計算すると不正確な結果
- 25. 関数のR&Cバージョンの結果が異なる - 丸め誤差または演算子エラー?
- 26. StringFormatを使用して連結されたdouble値を丸める方法
- 27. Android用アプリケーション - 計算された結果を表示するには
- 28. ゼロを使用した計算式
- 29. rdtscを使用した秒計算
- 30. COUNT()を使用した計算