Complexクラスと!のついたメソッド

Complexは複素数です。

require "complex"

c = Complex(1, 2)
p c             #=> Complex(1, 2)
p c.real        #=> 1
p c.image       #=> 2
p c.arg         #=> 1.10714871779409
p c.polar       #=> [2.23606797749979, 1.10714871779409]
p c.conjugate   #=> Complex(1, -2)

d = Complex(-1, 0)
p d.arg         #=> 3.14159265358979
p d.polar       #=> [1.0, 3.14159265358979]

Rationalは有理数です。
Rational(分子, 分母)で、約分や分母のゼロチェックをしてオブジェクトを作ります。
Rational.new!というコンストラクタもありますが、こちらは約分も分母のゼロチェックもしません。
ちなみにRational.newはprivateです。

half = Rational(1, 2)
one = half + half

p half                  #=> Rational(1, 2)
p one                   #=> Rational(1, 1)
p half.to_f             #=> 0.5
p one.to_f              #=> 1.0

r = Rational(12, 24)
p r                     #=> Rational(1, 2)

p Rational.new!(1, 2)   #=> Rational(1, 2)
p Rational.new!(12, 24) #=> Rational(12, 24)
p Rational.new!(1, 0)   #=> Rational(1, 0)
p Rational(1, 0)        #=> in `reduce': denominator is zero (ZeroDivisionError)

疑問:!がついたメソッドは破壊的メソッド(例:String#chomp!)だと思っていたのですが、このRational.new!に!がついている理由は何でしょうね。
追記:kjanaさんから「より安全でない・特殊な・注意を要するメソッドの印として ”!” を付ける」のだそうです。なるほど。情報感謝です。
疑問:では、二つ以上!がついたメソッドはあるでしょうか explode_the_earch!!!!!!! とか。超破壊的メソッド :-)
追記:ri !!とrefe !!ではとりあえず見つかりませんでした。id:walf443さんもコメント感謝です。そういえば、?も似ていますね。Haskellの'だと何個でもつくんですけどね。

> ri !!
Nothing known about !!

> refe !!
not match: !!

といいますか、エラーでした。

def rubyco
end

def rubyco!
end

def rubyco!!    #=> parse error, unexpected '!', expecting '\n' or ';'
end