Discuss Scratch

inoking
Scratcher
1000+ posts

Scratch数学カフェ

「三角比」などで調べてください。
一般的な話は、ここで聞くよりはるかに分かりやすくていねいな解説がいくつも見つかるはずです。

Last edited by inoking (July 15, 2025 01:27:41)

U-Y-Scratch
Scratcher
500+ posts

Scratch数学カフェ

Yu14916 wrote:

中心が(0,0)、半径が1の円を想像してください。その中心から、n°に向かって線を引くとします。そうすると、円のどこかと交わるはずです。そのとき、交わった点のx座標がcos(n)、y座標がsin(n)です。

画像:Wikipedia
こういうことですか?

Last edited by U-Y-Scratch (July 15, 2025 01:36:17)

exment
Scratcher
100+ posts

Scratch数学カフェ

はい。その図を見て理解できるなら質問の意味がなくないですか?
なんであれ、一般的な三角比の話はこれ以上フォーラムでは適しません。inokingさんの通り自分で検索するか、フォーラム外で話す事をおすすめします。
tuneninemuihito
Scratcher
100+ posts

Scratch数学カフェ

scratchでlogの計算をする時って底の変換公式使えばいいですか?

例:log3(9)
(([log v] of (9)::operators) / ([log v] of (3)::operators))
で計算出来るって認識で良いですよね?
kouryou118103
Scratcher
1000+ posts

Scratch数学カフェ

底の変換公式はあっています。実際に、ln(9)/ln(3)=2 で、3^2=9 なのであっています。

追記
logって底10でした…

Last edited by kouryou118103 (July 16, 2025 11:14:17)

7R514_js
Scratcher
7 posts

Scratch数学カフェ

#1124
その認識で正しいと思います。
ただし、計算過程で分子と分母をそれぞれ有限長の小数にする都合上、ぴったり2にはなりません。小数点以下の適当な桁で四捨五入しましょう。

(ちなみにlogは常用対数、lnは自然対数で、底がそれぞれ10, eと異なります。どちらを使用しても同じことができますが、単に計算したいだけなら、有理数が底である方が有利な場面が多いはずです)
kikakuyou
Scratcher
6 posts

Scratch数学カフェ

最近素数計算関数π(x)を補正対数積分関数Li(x)で近似することに興味があり、そのLi(x)は級数で近似できるのですが、その級数に(-1)^(n-1)という式が含まれています。自分はこれを
((((n) mod (2)) * (2)) - (1))
と表現して現在は級数を計算しています。
それで気になったのですが、これより簡潔(わかりやすい or 使用されるブロック数が少ない)に表現する方法はありますか?
rice-people
Scratcher
11 posts

Scratch数学カフェ

#1127
私が試した限りでは、使用されるブロック数を4個(上記のブロックの個数)未満にすることはできませんでした。
指数に(n-1)とあるのでおそらく、どのやり方で作るにも1を引く動作が必要なのだと思います。

Last edited by rice-people (Dec. 30, 2025 07:20:35)

kikakuyou
Scratcher
6 posts

Scratch数学カフェ

#1128

返信ありがとうございます。
先日、個人的に @yukkuさんから下記の3ブロックで成り立つと教えていただきました。

([cos v] of ((n) * (180))::operators)

追記が遅れてしまい、申し訳ないです。
makoto2014
Scratcher
3 posts

Scratch数学カフェ

スーパーπをガウス=ルジャンドル法で実装しましたが全く3355万桁を1日で計算させることはできません。軽量化の方法を教えてください。
gccxnondx
Scratcher
100+ posts

Scratch数学カフェ

https://scratch.mit.edu/discuss/topic/625573/?page=1#post-6551506
3355万桁もの数字となると、Scratchで扱える数字の限界を超えているため、計算できなくてもどうしようもありません。
少数であれば、数字の限界を超えていなくても誤差が発生することがあるので、計算できなくてもどうしようもありません。
haxm-v
Scratcher
20 posts

Scratch数学カフェ

#1131
リストを使えば、3355万桁は計算できそうですね。ただ、リストの20万制限に気を付けなければいけませんが。
でもよく考えたら、単に変数1個でもいける気がする

Last edited by haxm-v (Jan. 25, 2026 04:57:52)

usuusussei
Scratcher
59 posts

Scratch数学カフェ

三角形の面積を求める式
必要な変数:
x1, y1, x2, y2, x3, y3, AB, AC, cosA, sinA, 面積
コード:
AB を ( √( (x2 − x1) × (x2 − x1) + (y2 − y1) × (y2 − y1) ) ) にする
AC を ( √( (x3 − x1) × (x3 − x1) + (y3 − y1) × (y3 − y1) ) ) にする
cosA を ( ((x2 − x1) × (x3 − x1) + (y2 − y1) × (y3 − y1)) ÷ (AB × AC) ) にする
sinA を ( √( 1 − (cosA × cosA) ) ) にする
面積 を ( 0.5 × AB × AC × sinA ) にする

Last edited by usuusussei (Feb. 16, 2026 01:56:10)

abee
Scratcher
1000+ posts

Scratch数学カフェ

都度の角度の変更は0.1度なので、繰り返し回数は360ではなく3600ですね(つまり3600角形)。
実際に実行してみましたが特にずれはありませんでした。
sugakudaisuki
Scratcher
4 posts

Scratch数学カフェ

ニュートン法で平方根を求める、多倍長演算の素材を作ろうとしているのですが、良い初期値(なるべく分数が良い)の決め方はありませんか?
tabakenn
Scratcher
100+ posts

Scratch数学カフェ

初期値はscratchにある
((2)の平方根::operators)
ブロックを使うのがいいです

ニュートン法自体は多倍長演算であっても小数で進めると思うので、良くわからないけれど、
14142/10000 のようにして分数化できます

平方根ブロックを使わないのであれば、初期値は1でもkでもk/2でも良いらしいです。
ニュートン法は収束が早い系なので、1もkも1回の反復で同じ値に更新されます。
初期値の精度を良くするより、てきとうに決めてしまってニュートン法で計算していくのが良いらしいです。
kemo33oolong-2025x5G
Scratcher
41 posts

Scratch数学カフェ

浮動小数点数の影響で小数演算がバグります。今まで手計算でやってましたが、この先の未来さらに変数を使ったりするのでこれの対処法を教えてください。今までの10倍とか100倍とかした後、10分の1、100分の1を自分でずっと組み込んでましたが、それを自動で10分の1、100分の1とかにできるプログラムがあればそちらもお願いします。※質問コーナー7に質問した時、回答者さんからこちらを紹介されました。追記#1116と同じような状況です。私が書いた手計算は1度小数点以下を消して後からその分小数点を移動するという意味です。簡略したいです

Last edited by kemo33oolong-2025x5G (June 10, 2026 11:36:30)

gannbaru306
Scratcher
25 posts

Scratch数学カフェ

#1139
こちらを使ってみてはどうでしょう。自動で小数を整数に直して正しく計算してくれます。小さすぎる小数は無理ですが…
追記
すみません、プログラムに不備がありまくりなので直します
追々記
直しました

Last edited by gannbaru306 (June 10, 2026 13:03:55)

7R514_js
Scratcher
7 posts

Scratch数学カフェ

どのようなプロジェクトを作りたいのかにもよりますが、誤差の発生は避けられないことと考えたうえで、計算・処理を設計するというのも選択肢です。
具体例をいくつか出します。(数式はLaTeX対応エディタ等でご覧いただくか、脳内でレンダリングしてください)

二次方程式の解の公式 $x = \frac{-b \pm \sqrt{b^2 - 4ac}}{2a}$ では、$b>0$ のとき、$-b + \sqrt{b^2 - 4ac}$ が同程度の絶対値の引き算になるため、桁落ちが発生しやすいです。
大きい方の解を求める際には、分子を有理化して $x = \frac{2c}{-b - \sqrt{b^2 - 4ac}}$ とすることで引き算を回避し、精度を向上させることができます。

$e^x$ のマクローリン展開 $\Sigma_{k=0}^{\infty} \frac{x^k}{k!}$ では、愚直に計算した場合、$x<0$ のとき、正の数と負の数を交互に足すことになるため、桁落ち・情報落ちの影響を受けやすいです。
正と負の項を独立して計算する、あるいは $e^x = \frac{1}{e^{-x}}$ とすることで、精度を改善することができます。
また、$x$ の絶対値が大きいときにも情報落ちが発生します。整数部 $z$ と小数部 $f$ に分けて、$e^x = e^z \cdot e^f$ とすると、$e^z$ のほうは掛け算のループで表現可能なため、より安定します。
(誤差比較のグラフ: https://scratch.mit.edu/projects/1330532726/ )

このように、計算1つとっても、手順次第で誤差の程度が大きく変わってきます。
より精度よく計算できる方法がないか、探してみるのも手です。

Last edited by 7R514_js (June 10, 2026 16:08:55)

inoking
Scratcher
1000+ posts

Scratch数学カフェ

#1139 からの流れ:
任意精度演算というアプローチもあります。
Scratch 内でも実装例があります。

Powered by DjangoBB