Skip to content
/ dntk Public

๐Ÿงฎ Command line's multi-platform interactive calculator, with bc-compatible syntax and high-precision arithmetic.

License

Notifications You must be signed in to change notification settings

nnao45/dntk

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

dntk

CI Release v3.1.0 crates docker license platform

dntk is command line's multi-platform Interactive calculator with bc-compatible syntax and high-precision arithmetic. gjf

โœ”๏ธŽ dntk means calculator in a japanese.
โœ”๏ธŽ dntk is bc-compatible calculator with bc-style configurable precision powered by dashu-decimal (no external bc required!)
โœ”๏ธŽ dntk syntax is compatible with GNU bc. learn syntax more
โœ”๏ธŽ dntk is a NATIVE The Rust Programming Language application.
โœ”๏ธŽ dntk can move cursor, can delete char, can refresh buffer.
โœ”๏ธŽ dntk provides accurate decimal arithmetic without floating-point errors.

Current dntk's version:v3.1.0

Download Page: https://github.com/nnao45/dntk/releases/latest

โœจ Key Features

๐ŸŽฏ High-Precision Arithmetic

  • Powered by dashu-decimal for arbitrary-precision decimals with predictable bc semantics
  • Configurable scale (default 20 fractional digits) with faithful truncation just like GNU bc
  • No floating-point errors: 1 + 0.7 = 1.7 (not 1.69999...)
  • Accurate division: 1/3 = .33333333333333333333

โšก Fast & Lightweight

  • No external dependencies (bc command not required!)
  • Pure Rust implementation for maximum performance
  • Optimized expression evaluation with fasteval + dashu-decimal

๐ŸŒ True Cross-Platform

  • Works out of the box on Windows, Linux, macOS, and FreeBSD
  • No need to install bc.exe on Windows anymore!
  • Single binary, easy deployment

๐Ÿ”ง bc-Compatible

  • Supports standard bc syntax and functions
  • Rich math library: trig/hyperbolic (sin, cos, tan, โ€ฆ), logarithms (log, ln, log10, โ€ฆ), powers (pow, sqrt, cbrt), aggregations (min, max, hypot) plus length, scale, and Bessel j(n,x) โ€” short aliases like s(), c(), a(), l(), e() still work
  • Interactive REPL with cursor movement and editing

๐Ÿงฎ Complex & Matrix Literals

  • Type complex numbers directly with i, e.g. 1+2i, (4-3i)/(1+2i), or abs(3+4i)
  • Multiply and add matrices inline using JSON-like brackets: [[1,2],[3,4]] * [[5,6],[7,8]]
  • For purely imaginary values, give the coefficient explicitly (1i, -2i) so regular bc identifiers like i keep their original meaning

๐Ÿณ๏ธโ€๐ŸŒˆ Colorful output

  • write color means,
color means
cyan can caluclate & can output
megenta can't caluclate, can't output
yellow danger input char, output warning
green clean buffer message

Platform

dntk support multi-platform ๐Ÿ˜Š mac, linux, freebsd, and windows!!!

  • i686-osx
  • x86_64-osx
  • i686-linux
  • x86_64-linux
  • i686-windows
  • x86_64-windows
  • i686-freebsd
  • x86_64-freebsd

Install

Mac

$ brew install nnao45/dntk/dntk

Linux

$ wget https://github.com/nnao45/dntk/releases/download/v3.1.0/dntk-v3.1.0-x86_64-unknown-linux-musl.zip
$ unzip dntk-v3.1.0-x86_64-unknown-linux-musl.zip

Windows

$ wget https://github.com/nnao45/dntk/releases/download/v3.1.0/dntk-v3.1.0-x86_64-pc-windows-msvc.zip
$ unzip dntk-v3.1.0-x86_64-pc-windows-msvc.zip

FreeBSD

$ wget https://github.com/nnao45/dntk/releases/download/v3.1.0/dntk-v3.1.0-x86_64-unknown-freebsd.zip
$ unzip dntk-v3.1.0-x86_64-unknown-freebsd.zip

Cargo

$ cargo install dntk

zplug

$ zplug 'nnao45/dntk', as:command, from:gh-r

Docker

Can use dntk docker image,
Look!! Very light weight!!๐Ÿš€

$ docker images nnao45/dntk
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nnao45/dntk         latest              3a37b5d989b5        2 hours ago         10.5MB

And run,

$ docker run -it --rm nnao45/dntk:latest

And...

$ echo 'alias bc=dntk' >> ~/.bashrc
$ echo 'alias bc=dntk' >> ~/.zshrc

All OK!! ๐Ÿ˜Ž

Options

โฏโฏโฏ dntk -h
Command line's multi-platform interactive calculator with high-precision arithmetic.

USAGE:
    dntk [FLAGS] [OPTIONS]

FLAGS:
    -h, --help           Prints help information
        --once           Run at only once
    -q, --quiet          No print information message
        --show-limits    Print the local limits
    -V, --version        Prints version information
    -w, --white          Set White color in a output

OPTIONS:
    -i, --inject <inject>      Pre-run inject statement to the dntk [default: ]
    -s, --scale <scale>        Number of decimal places (max 28) [default: 20]

Note: --bc-path option has been removed as dntk no longer requires external bc command!

Pipe Support

$ echo "123 * 2" | dntk
246

behave, like bc โ˜บ๏ธ

Paste Support

$ echo '( 1 + 2 + 3 + 4 + 51 ) / sqrt( 123 / 3 )' | pbcopy
$ pbpaste | dntk
9.52659947520496999698

Windows Support

No additional setup required! ๐ŸŽ‰

dntk works out of the box on Windows without installing bc.exe. Just download and run!

gjf

Previous versions (v3.1.0 and earlier)

Older versions required bc.exe installation. If you're using an older version:

$ choco install gnuwin

Recommendation: Upgrade to the latest version for better Windows support!

Keybind

Basic Key

key feature
[, โ† cursor move to left
], โ†’ cursor move to right
0~9 Sendkey this number
Ctrl+C, Enter Finish dntk app
Delete, Backspace Delete current char
@ Clean buffer

Basic Operation

key feature
+ plus
- minus
* multiplication
/ division
^ exponentiation
% remainder

Operation for Logical

key feature
! boolean, relational
| boolean
& boolean
> relational
< relational
= relational

Using Function

dntk ships the bc classics plus a broad math toolkit:

  • Aliases for bc-style shortcuts: s(x) โ†’ sin(x), c(x) โ†’ cos(x), a(x) โ†’ atan(x), l(x) โ†’ ln(x), e(x) โ†’ exp(x)
  • Powers & roots: sqrt(x), cbrt(x), pow(x,y)
  • Logs & exponentials: ln(x), log10(x), log2(x), log(base,value) (arbitrary base), exp(x), expm1(x)
  • Trigonometric family: sin, cos, tan, asin, acos, atan, atan2
  • Hyperbolic family: sinh, cosh, tanh, asinh, acosh, atanh
  • Rounding helpers: abs, sign, floor, ceil, trunc, round
  • Aggregations: min(...), max(...), hypot(x,y)
  • Precision utilities: length(x) (digit count), scale(x) (fractional digits), obase= for base-2ใ€œ36 output
  • Randomness & special: rand() / rand(n), srand(seed), j(n,x) Bessel (integer order n)

more detail ๐Ÿ‘‰ https://www.gnu.org/software/bc/manual/html_mono/bc.html

๐Ÿ”ฌ Technical Details

Architecture

dntk uses a hybrid approach for optimal performance and precision:

  1. Expression Parsing: fasteval - Fast and lightweight expression parser
  2. High-Precision Arithmetic: rust_decimal - 28-digit decimal precision
  3. Result Formatting: bc-compatible output format

Precision Comparison

Calculator Precision Example: 1+0.7 Example: 1/3 (20 digits)
bc 20 digits (default) 1.7 .33333333333333333333
dntk (old) ~15 digits (f64) 1.69999... โŒ .33333333333333331483 โŒ
dntk (new) 28 digits 1.7 โœ… .33333333333333333333 โœ…

Dependencies

  • fasteval - Expression evaluation
  • rust_decimal - High-precision decimal arithmetic (up to 28 digits)
  • Pure Rust implementation (no C library dependencies)

Why No bc Command Required?

Previous versions wrapped the external bc command. The new version:

  • Implements bc-compatible arithmetic in pure Rust
  • Eliminates subprocess overhead
  • Works on all platforms without external dependencies
  • Provides better precision (28 vs 20 digits)

Development Guide

Compile

Binary

$ make

Docker

$ make docker-build

Contribute

Always Welcome!! ๐Ÿ˜„

Have a nice rust hacking daysโœจ๐Ÿ˜‰

Writer & License

dntk was writed by nnao45 (WORK:Infrastructure Engineer, Twitter:@nnao45, MAIL:n4sekai5y@gmail.com).
This software is released under the MIT License, see LICENSE.

About

๐Ÿงฎ Command line's multi-platform interactive calculator, with bc-compatible syntax and high-precision arithmetic.

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 3

  •  
  •  
  •  

Languages