ちょっと長い計算式で,うっかりするととんでもないことになりかねないので注意が必要。
(a, b, d) = (3000, 4000, 456)
(1/(a*b)*(a*b*(a + b) - d*(a^2 + b^2) - sqrt((-a*b*(a + b) + d*(a^2 + b^2))^2 - 2*a^3*b^3)))
# 5829.850417385261
答えとして 5829.850417385261 が表示されるが,これは正しくない。エラーメッセージなどは一切表示されない。
a, b, c を浮動小数点数にすると正しい答え 2500.0 が得られる。
(a, b, d) = (3000.0, 4000.0, 456.0)
(1/(a*b)*(a*b*(a + b) - d*(a^2 + b^2) - sqrt((-a*b*(a + b) + d*(a^2 + b^2))^2 - 2*a^3*b^3)))
# 2500.0
R では特に指定しない限り変数は double なので,何もしなくても正しい答えが得られる。
> a = 3000; b = 4000; d = 456
> (1/(a*b)*(a*b*(a + b) - d*(a^2 + b^2) - sqrt((-a*b*(a + b) + d*(a^2 + b^2))^2 - 2*a^3*b^3)))
[1] 2500
Python では整数は必要ならば自動的に長精度演算が行われるので,この場合も特に何もしなくても正しい答えが得られる。
>>> import math
>>> (a, b, d) = (3000, 4000, 456)
>>> (1/(a*b)*(a*b*(a + b) - d*(a**2 + b**2) - math.sqrt((-a*b*(a + b) + d*(a**2 + b**2))**2 - 2*a**3*b**3)))
2500.0